Nie jestem do końca pewien, dlaczego tak się dzieje, ani jak właściwie to wyjaśnić, ale może ktoś może rzucić trochę światła na to.Zmienna pusta do ponownego przypisania
Mam system CMS oparty na CodeIgniter/OpenCart Framework wykorzystujący rejestr, kontroler i moduł. Mam biegać w sytuacji, w której już wcześniej zapisany do zmiennej w rejestrze jako:
$this->application_page = 'current/page';
Ale z jakiegoś powodu, gdy nazywam go w aplikacji:
echo empty($this->application_page)?'yes':'no';
//Returns Yes
Ale .. Kiedy Przypisz IT:
echo empty($this->application_page)?'yes':'no';
//Returns Yes
$page = $this->application_page;
echo empty($page)?'yes':'no';
//Returns No
A powraca var_dump:
var_dump($this->application_page);
string 'current/page' (length=12)
Mogę obejść to dość łatwo, po prostu używając $page
, ale jestem ciekawy, dlaczego tak się dzieje?
UPDATE:
Więc zawiedli wokół z funkcją _isset
ale nie zmusić go do pracy, być może mój błąd, może nie .. Oto jak to wszystko działa razem:
class Registry {
private $data = array();
public function get($key){ return (isset($this->data[$key]) ? $this->data[$key] : NULL); }
public function set($key,$val){ $this->data[$key] = $val;
}
abstract class Controller {
protected $registry;
public function __construct($registry){ $this->registry = $registry; }
public function __get($key){ return $this->registry->get($key); }
public function __set($key,$value){ $this->registry->set($key, $value); }
}
class Applications {
private $registry;
function __construct($Registry){ $this->registry = $Registry; }
function __get($key){ return $this->registry->get($key); }
function __set($key,$val){ return $this->registry->set($key,$val); }
public function buildApplication(){
$this->application_page = 'current/page';
$application = new application($this->registry);
}
}
class Application extends Controller {
public function index(){
echo empty($this->application_page)?'yes':'no';
//Returns Yes
$page = $this->application_page;
echo empty($page)?'yes':'no';
//Returns No
}
}
Mam nadzieję, że to pomaga? Miał typo, funkcje rejestru nie są magiczne metody. Również rejestr $ został zadeklarowany w aplikacjach.
Czy jesteś w 100% pewien, że nie miałeś literówki w swoich nazwach var podczas testowania tego? – NDM
Przepraszamy za opóźnienie! Tak, jestem pewien, dwukrotnie sprawdziłem około 5 razy, zanim wysłałem =) – Corey
@Corey Proszę zobaczyć moją zaktualizowaną odpowiedź. – ComFreek