从成员变量访问拥有对象

时间:2017-06-29 07:36:52

标签: php

代码片段胜过千言万语:

class Foo {
  private $bar;

  public function __construct(){
    $this->bar = new Bar(); 
}

class Bar {
  public function getFoo() {
    // ???
  }
}

有没有办法在成员变量类中获取对拥有对象实例(Foo的实例)的引用,而不显式将引用传递给成员变量或使用< EM>反射

1 个答案:

答案 0 :(得分:0)

反思在这里没有帮助。

无论如何,请求都没有意义。假设您有Bar::getFoo()的工作实现。在以下情况下应该返回什么?

  1. 在任何Bar对象之外创建Foo对象:

    $bar = new Bar();
    $bar->getFoo();           // ??
    
  2. Bar对象由Foo对象创建,并且链接到另一个Foo对象:

     $foo1 = new Foo();
     $foo2 = new Foo();
     $foo2->copyBar($foo1);
    
     class Foo {
         // ...
         public function copyBar(Foo $foo) { $this->bar = $foo->bar; }
     }
    
  3. 解决问题的唯一正确方法是将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
        }
    }
    
相关问题