1

我正在使用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);  
    }
}

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

怎么可能。谢谢。

4

3 回答 3

2

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

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


在手册中,请参阅有关变量范围的部分。


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

也许解决方案是:

  • 将该变量作为参数传递给方法?
  • 或将其传递给您的类的构造函数,并将其存储在属性中?
  • 或者添加一个将接收该变量的方法,并将其存储在属性中,如果您无法更改构造函数?
于 2010-03-24T06:26:45.370 回答
1

print_r($GLOBALS['logInArray']);

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

于 2010-03-24T06:25:06.200 回答
0

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

如果您需要访问从 SystemadminController 继承的许多控制器中的用户数组,您可以将其存储为 SystemadminController 的受保护属性(例如受保护的 $_user)。那么你在子控制器中需要做的就是访问$this->_user。

于 2010-03-24T07:15:05.237 回答