在PHP类之外定义变量

时间:2010-03-24 06:21:47

标签: php zend-framework global-variables zend-session

我正在使用zend。

我想在控制器类之外定义下面的代码&访问不同的操作。

$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);  
    }
}

但是它不会在索引函数中打印这个数组,另一方面它在类之外显示这个数组。

怎么可能。 感谢。

3 个答案:

答案 0 :(得分:2)

要从方法/函数内部访问全局变量,必须在方法/函数内声明它为global

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


在手册中,请参阅有关Variable scope

的部分


不过,请注意,使用全局变量并不是一个好习惯:在这种情况下,您的类不再是独立的:它依赖于外部变量的存在和正确定义 - 这是

也许解决方案是:

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

答案 1 :(得分:1)

的print_r($ GLOBALS [ 'logInArray']);

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

答案 2 :(得分:0)

您可以通过多种方式存储用户,并以更干净的方式访问它。您可以将它存储在Zend_Registry中,然后使用Zend_Registry :: get('user')来检索用户。您还可以将其存储为请求对象的参数,然后在控制器中只需执行$ user = $ this-> _getParam('user');

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