PHP OOP - 错误的变量返回?

问题描述:

好了,所以,用下面的代码:PHP OOP - 错误的变量返回?

class Core { 
    public $child; 
    public function start() { 
     $child = Loader::instance('Child'); 
     print_r($this); 
    } 
} 

class Loader extends Core { 
    public static $instances; 

    public static function instance($class) { 
     if(!isset(self::$instances[$class])) { 
      self::$instances[$class] = new $class(); 
     } 

     return self::$instances[$class]; 
    } 
} 

class Child extends Core { 
    public function __construct() { 
     parent::__construct(); 

     $this->child = 'test'; 
    } 
} 

Loader::instance('Core')->start(); 

我应该是一个的print_r($这个)后能够看到:

Core Object 
(
    [child] => test 
) 

,而不是

Core Object 
(
    [child] => 
) 

是什么正在发生?再次

谢谢..

start()方法的Core类中使用变量$child,这不是对象的属性。相反写:

class Core { 
    public $child; 
    public function start() { 
     $this->child = Loader::instance('Child')->child; 
     print_r($this); 
    } 
} 

并告诉我,这是否是你想要完成。

编辑:

我相信你能实现你想要通过引用静态变量是什么。但要小心,他们是如何工作的。此外,您将不会通过调用print_r()来查看结果。

下面是代码:

class Core { 
    static $child; 
    public function start() { 

     // invoking code that changes Core::$child inside 
     $child = Loader::instance('Child'); 

     print_r($this); 
    } 
} 

class Child extends Core { 
    public function __construct() { 
     parent::__construct(); 

     // changing static variable $child of both Core and Child 
     self::$child = 'test'; 
    } 
} 
+0

但孩子需要一个变量,而不是对象 '儿童' .. – 2011-05-09 00:06:32

+0

'的实例code'class儿童伸出核心{ public function __construct(){ parent :: __ construct(); $ this-> variable ='test'; } } – 2011-05-09 00:07:53

+0

@Gabriel我已经更新了答案(添加了' - > child'')。它现在对你有用吗? – Tadeck 2011-05-09 00:13:48

$child = Loader::instance('Child'); 

Shoulld是:

$this->child = Loader::instance('Child'); 

这是你的print_r输出来源于:

$child = Loader::instance('Child'); 
    print_r($this); 

它会打印出当前对象($this是一个Core),而不是新实例化的$ child(这将是一个Child类)。