Методы 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');
Другие вопросы по тегам