简体   繁体   English

PHP魔术方法-__get和__set在php MVC框架serviceFactory中不起作用

[英]PHP Magic Methods - __get and __set not working in php MVC framework serviceFactory

I created an instance of serviceFactory in index.php which simply gets/stores (private) variables in itself. 我在index.php中创建了serviceFactory的实例,该实例本身简单地获取/存储(私有)变量。 But, the __get and __set magic methods for some reason are not working. 但是,出于某种原因,__ get和__set魔术方法无法正常工作。 Doing a var_dump($serviceFactory->language) in the index returns false. 在索引中执行var_dump($ serviceFactory-> language)将返回false。 When I create an instance of serviceFactory, I pass the $router instance to the $serviceFactory constructor. 创建serviceFactory的实例时,会将$ router实例传递给$ serviceFactory构造函数。 The router is working (otherwise it would not display controller or view), but for some reason, when I try to __get the language from the $serviceFactory instance, it returns false and I'm confused as to why. 路由器正在工作(否则它将不会显示控制器或视图),但是由于某些原因,当我尝试从$ serviceFactory实例__get语言时,它返回false,我对原因感到困惑。

index.php index.php

//create an instance of serviceFactory
$serviceFactory = new serviceFactory($router);
var_dump($serviceFactory->language);

serviceFactory 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;
        }
    }
}

Simple, you've made a common mistake in working with instances: 很简单,您在使用实例时犯了一个常见错误:

  $data['language'] = $router->getKey('language'); $data['class'] = $router->getKey('className'); $data['method'] = $router->getKey('method'); $data['arg'] = $router->getKey('arg'); 

should all be 应该都是

  $this->data['language'] = $router->getKey('language'); $this->data['class'] = $router->getKey('className'); $this->data['method'] = $router->getKey('method'); $this->data['arg'] = $router->getKey('arg'); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM