【问题标题】:PHP Magic Methods - __get and __set not working in php MVC framework serviceFactoryPHP 魔术方法 - __get 和 __set 在 php MVC 框架 serviceFactory 中不起作用
【发布时间】:2013-08-20 23:28:06
【问题描述】:

我在 index.php 中创建了一个 serviceFactory 实例,它本身只是获取/存储(私有)变量。但是,由于某种原因,__get 和 __set 魔术方法不起作用。在索引中执行 var_dump($serviceFactory->language) 会返回 false。当我创建 serviceFactory 的实例时,我将 $router 实例传递给 $serviceFactory 构造函数。路由器正在工作(否则它不会显示控制器或视图),但由于某种原因,当我尝试从 $serviceFactory 实例中获取语言时,它返回 false,我不知道为什么。

index.php

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

服务工厂

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

【问题讨论】:

  • 你已经在传递同一个实例。
  • @vascowhite 在 baseView $this->language = "" 所以有些东西不工作。有什么建议吗?
  • @vascowhite 查看对我的问题的修改

标签: php object magic-methods service-factory


【解决方案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');

【讨论】:

  • 非常感谢!我昨晚注意到了,现在它工作正常。进入构建框架的下一阶段 -> 登录系统:/
猜你喜欢
  • 2011-06-10
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多