Определение переменных вне класса PHP

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

Но он не печатает этот массив в функции индекса, с другой стороны, он показывает этот массив вне класса.

Как это возможно. Благодарю.

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

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

В руководстве см. Раздел « Область переменной» .

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

Возможно, решение будет состоять в следующем:

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

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.