Определите переменные вне класса PHP - PullRequest
1 голос
/ 24 марта 2010

Я использую 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 ]

2 голосов
/ 24 марта 2010

Чтобы получить доступ к глобальной переменной внутри метода / функции, вы должны объявить ее как global, внутри метода / функции:

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


В руководстве см. Раздел о Переменная область действия .


Тем не менее, обратите внимание, что использование глобальных переменных не совсем хорошая практика: в этом случае ваш класс больше не является независимым: он зависит от наличия и правильного определения внешней переменной - что плохо .

Может быть, решение будет:

  • передать эту переменную в качестве параметра методу?
  • или передать его конструктору вашего класса и сохранить в свойстве?
  • или добавить метод, который получит эту переменную, и сохранить ее в свойстве, если вы не можете изменить конструктор?
1 голос
/ 24 марта 2010

print_r ($ GLOBALS [ 'logInArray']);

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

0 голосов
/ 24 марта 2010

Вы можете хранить пользователя разными способами и получать к нему доступ более чистым способом. Вы можете сохранить его в Zend_Registry и затем использовать Zend_Registry :: get ('user'), где вам нужно получить пользователя. Вы также можете сохранить его как параметр объекта запроса, а затем в контроллере просто выполните $ user = $ this -> _ getParam ('user');

Если вам нужен доступ к массиву пользователей во многих контроллерах, которые наследуются от SystemadminController, вы можете сохранить его как защищенное свойство SystemadminController (например, protected $ _user). Тогда все, что вам нужно сделать в дочерних контроллерах, это получить доступ к $ this -> _ user.

...