PHP OOP - 返回了错误的变量?

时间:2011-05-08 23:49:12

标签: php oop variables

好的,所以,使用下面的代码:

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($ this)之后看到:

Core Object
(
    [child] => test
)

而不是

Core Object
(
    [child] => 
)

现在发生了什么?

再次感谢..

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

应该是:

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

答案 2 :(得分:0)

这是print_r输出的来源:

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

它将打印当前对象($thisCore),而不是新实例化的$ child(可能是Child类)。