PHP / CodeIgniter – установка переменных в __construct (), но они недоступны из других функций

Я доволен проблемой с переменным охватом. Может быть, мне просто нужно больше кофе …

Вот мой (упрощенный) код – это в CodeIgniter 2:

class Agent extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('agent_model'); // Get preliminary data that will be often-used in Agent functions $user = $this->my_auth_library->get_user(); $agent = $this->agent_model->get_agent($user->id); } public function index() { $this->template->set('info', $this->agent_model->get_info($agent->id)); $this->template->build('agent/welcome'); } 

К сожалению, когда я запускаю функцию индекса, мне говорят:

 A PHP Error was encountered Severity: Notice Message: Undefined variable: agent Filename: controllers/agent.php Line Number: 51 

Строка 51 – первая строка индексной функции. Что случилось? Это вопрос о масштабах или что-то еще?

Благодаря!

Solutions Collecting From Web of "PHP / CodeIgniter – установка переменных в __construct (), но они недоступны из других функций"

Вы не задали $agent в своем действии индекса, если вы хотите, чтобы переменные, установленные в конструкторе, были доступны, вы должны установить их как свойство класса, то есть: $this->Agent = ...; , и получить доступ к ним одинаково с $this->Agent->id . (Я бы использовал их, чтобы показать, что они являются объектами, а не только переменными) Например:

 $this->User = $this->my_auth_library->get_user(); $this->Agent = $this->agent_model->get_agent($user->id); 

Конструктор ведет себя так же, как и любые другие методы класса, его единственным специальным свойством является то, что он автоматически запускается при создании экземпляра класса, нормальная переменная область по-прежнему применяется.

вам нужно определить переменные вне конструктора, например:

 class Agent extends CI_Controller { private $agent; private $user; public function __construct() { parent::__construct(); $this->load->model('agent_model'); // Get preliminary data that will be often-used in Agent functions $this->user = $this->my_auth_library->get_user(); $this->agent = $this->agent_model->get_agent($user->id); } public function index() { $this->template->set('info', $this->agent_model->get_info($this->agent->id)); $this->template->build('agent/welcome'); } } 

то вы можете установить и получить их с помощью $this->agent