代码片段胜过千言万语:
class Foo {
private $bar;
public function __construct(){
$this->bar = new Bar();
}
class Bar {
public function getFoo() {
// ???
}
}
有没有办法在成员变量类中获取对拥有对象实例(Foo
的实例)的引用,而不显式将引用传递给成员变量或使用< EM>反射
答案 0 :(得分:0)
反思在这里没有帮助。
无论如何,请求都没有意义。假设您有Bar::getFoo()
的工作实现。在以下情况下应该返回什么?
在任何Bar
对象之外创建Foo
对象:
$bar = new Bar();
$bar->getFoo(); // ??
Bar
对象由Foo
对象创建,并且链接到另一个Foo
对象:
$foo1 = new Foo();
$foo2 = new Foo();
$foo2->copyBar($foo1);
class Foo {
// ...
public function copyBar(Foo $foo) { $this->bar = $foo->bar; }
}
解决问题的唯一正确方法是将Foo
对象传递给Bar
对象的构造函数,让Bar
对象保留对Foo
的后向引用创建(并拥有)它的对象:
class Foo {
private $bar;
public function __construct() {
$this->bar = new Bar($this);
}
}
class Bar {
private $foo;
public function __construct(Foo $foo) {
$this->foo = $foo;
}
public function getFoo() {
return $this->foo; // of course
}
}