2013-08-20 45 views
0

我在index.php中创建了一个serviceFactory的实例,它只是自己获取/存储(私人)变量。但是,由于某种原因,__get和__set魔术方法不起作用。在索引中执行var_dump($ serviceFactory-> language)将返回false。当我创建serviceFactory的实例时,我将$ router实例传递给$ serviceFactory构造函数。路由器正在工作(否则它不会显示控制器或视图),但出于某种原因,当我尝试从$ serviceFactory实例中__get语言时,它返回false,我对此感到困惑。PHP魔术方法 - __get和__set不工作在PHP MVC框架服务工厂

的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; 
     } 
    } 
} 
+1

您已经通过他们相同的实例。 – vascowhite

+0

@vascowhite在baseView $ this-> language =“”所以有些东西没有工作。有任何建议吗? – Aaron

+0

@vascowhite查看编辑我的问题 – Aaron

回答

0

简单,你犯了一个常见的错误与实例工作:

$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'); 
+0

非常感谢你!我注意到,昨天晚上,它现在工作正常。在构建我的框架的下一个阶段 - >登录系统:/ – Aaron