定义PHP类以外的变量

问题描述:

我使用zend。定义PHP类以外的变量

我想在控制器类&以外的其他操作中定义下面的代码。

$user = new Zend_Session_Namespace('user'); 
$logInArray = array(); 
$logInArray['userId'] = $user->userid; 
$logInArray['orgId'] = $user->authOrgId; 

class VerifierController extends SystemadminController 
{ 
public function indexAction() 
    { 
     // action body 
     print_r($logInArray); 
    } 
} 

但它不打印,另一方面这个数组中的索引功能,它显示类不在此阵。

这怎么可能。 谢谢。

要从方法/函数内部访问一个全局变量,你必须将其声明为global,方法/函数内部:

class VerifierController extends SystemadminController 
{ 
public function indexAction() 
    { 
     global $logInArray; 
     // action body 
     print_r($logInArray); 
    } 
} 


在手册中,看到了有关Variable scope的部分。


不过,请注意,使用全局变量是不太好的做法:在这种情况下,你的类不再独立的:它依靠的存在,正确的定义,外部变量 - 这是不好的

也许一个解决方案是:

  • 通该变量作为参数传递给该方法?
  • 或将它传递给你的类的构造函数,并将其存储在属性中?
  • 或者添加一个方法,它将接收该变量并将其存储在一个属性中,如果无法更改构造函数?
+0

已测试&工作:) – apis17 2010-03-24 06:34:16

print_r($ GLOBALS ['logInArray']);

http://php.net/manual/en/reserved.variables.globals.php

您可以用许多方式存储用户,并以更干净的方式访问用户。您可以将它存储在Zend_Registry中,然后在需要检索用户的地方使用Zend_Registry :: get('user')。你也可以把它作为请求对象的参数存储起来,然后在控制器中简单地做$ user = $ this - > _ getParam('user');

如果您需要访问许多控制器中从SystemadminController继承的用户数组,您可以将其作为SystemadminController的受保护属性(例如。protected $ _user)进行存储。然后,您需要在子控制器中执行的操作是访问$ this - > _ user。