Cieszy mnie trochę problem ze zmiennym zakresem. Może po prostu potrzebuję więcej kawy...
Oto mój (uproszczony) kod - to jest w 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');
}
Niestety, kiedy uruchamiam funkcję indeksu, otrzymuję informację:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: agent
Filename: controllers/agent.php
Line Number: 51
Linia 51 to pierwszy wiersz funkcji indeksu. Co się dzieje? Czy to kwestia zakresu, czy coś innego?
Dzięki!
2 odpowiedzi
Nie ustawiłeś $agent
w akcji index, jeśli chcesz, aby zmienne ustawione w konstruktorze były dostępne, musisz ustawić je jako właściwość klasy, tj.: $this->Agent = ...;
i uzyskać do nich dostęp w ten sam sposób za pomocą $this->Agent->id
. (Zapiszę je wielką literą, aby pokazać, że są obiektami, a nie tylko zmiennymi) Na przykład:
$this->User = $this->my_auth_library->get_user();
$this->Agent = $this->agent_model->get_agent($user->id);
Konstruktor zachowuje się tak samo jak inne metody klas, jego jedyną specjalną właściwością jest to, że jest uruchamiany automatycznie, gdy klasa jest tworzona, nadal obowiązuje normalny zakres zmiennych.
Musisz zdefiniować zmienne poza konstruktorem, na przykład:
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');
}
}
Następnie możesz je ustawić i uzyskać za pomocą $this->agent
Podobne pytania
Powiązane pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.