好的,所以,使用下面的代码:
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] =>
)
现在发生了什么?
再次感谢..
答案 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);
它将打印当前对象($this
是Core
),而不是新实例化的$ child(可能是Child
类)。