Методы PHP Magic - __get и __set не работают в фреймворке php MVC serviceFactory
Я создал экземпляр serviceFactory в index.php, который просто получает / хранит (приватные) переменные в себе. Но магические методы __get и __set по какой-то причине не работают. Выполнение var_dump($serviceFactory->language) в индексе возвращает false. Когда я создаю экземпляр serviceFactory, я передаю экземпляр $router конструктору $ serviceFactory. Маршрутизатор работает (в противном случае он не будет отображать контроллер или представление), но по какой-то причине, когда я пытаюсь __get получить язык из экземпляра $ serviceFactory, он возвращает false, и я не понимаю, почему.
index.php
//create an instance of serviceFactory
$serviceFactory = new serviceFactory($router);
var_dump($serviceFactory->language);
ServiceFactory
class serviceFactory {
private $data = array();
public function __construct($router) { //store the router data
$data['language'] = $router->getKey('language');
$data['class'] = $router->getKey('className');
$data['method'] = $router->getKey('method');
$data['arg'] = $router->getKey('arg');
}
public function __set($key, $val) {
$this->data[$key] = $val;
}
public function __get($key) {
if(isset($this->data[$key])) {
return $this->data[$key];
}
else {
return false;
}
}
}
1 ответ
Решение
Просто, вы сделали общую ошибку при работе с экземплярами:
$data['language'] = $router->getKey('language'); $data['class'] = $router->getKey('className'); $data['method'] = $router->getKey('method'); $data['arg'] = $router->getKey('arg');
все должны быть
$this->data['language'] = $router->getKey('language'); $this->data['class'] = $router->getKey('className'); $this->data['method'] = $router->getKey('method'); $this->data['arg'] = $router->getKey('arg');