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';
}
}
答
$child = Loader::instance('Child');
Shoulld是:
$this->child = Loader::instance('Child');
答
这是你的print_r输出来源于:
$child = Loader::instance('Child');
print_r($this);
它会打印出当前对象($this
是一个Core
),而不是新实例化的$ child(这将是一个Child
类)。
但孩子需要一个变量,而不是对象 '儿童' .. – 2011-05-09 00:06:32
'的实例code'class儿童伸出核心{ public function __construct(){ parent :: __ construct(); $ this-> variable ='test'; } } – 2011-05-09 00:07:53
@Gabriel我已经更新了答案(添加了' - > child'')。它现在对你有用吗? – Tadeck 2011-05-09 00:13:48