2012-01-13 124 views
0

下面的代码段:是否有可能获得父呼叫子对象?

class a{ 

     public function __get($key) { 
      if($key == 'obj') { 
       if($b->obj == null) { //PSEUDO this is what I intend to do :) 
        $obj = new Obj();       
        $b->obj = $obj 
       } 
       return $obj; 
      } 
     } 
    } 

class b extends a{ 

     private $obj = null; 


     public function __get($key) { 
      return parent::__get($key); 
     } 

    } 

这样的想法是创造需求的对象。但我不知道是否可以检测调用parent :: _ get方法的对象的类。一些像孩子这样的操作员就是我在寻找的东西我猜:)。

什么是可能的,但多余的是,比如我有一个名为国家一个对象,所以我在其中有一个国家目标和其他类地点与也有一个Country对象我的类用户自定义。这两个类都扩展了class a。我可以通过将a类中的if块写入每个子类来解决问题。但那是我不想做的。因此,能够在类中检查一个名为__get函数的类并将所需的Country对象直接设置到子类中会更容易。我希望我的问题变得清晰,这不是太奇怪,呵呵。尽管我对任何其他解决方案都是开放的......谢谢。

回答

0

http://codepad.org/Qnc938Wv

class a{ 

    public function __get($key) { 
     if($key == 'obj') { 
      if($this->_obj == null) { //PSEUDO this is what I intend to do :) 
       echo "creating "; 
       $obj = new StdClass();       
       $obj->what = get_class($this); 
       $this->_obj = $obj; 
      } 
      return $this->_obj; 
     } 
    } 
} 

class location extends a{ 
    protected $_obj = null; 
    public function __get($key) { 
     return parent::__get($key); 
    } 
} 

class user extends a{ 
    protected $_obj = null; 
    public function __get($key) { 
     return parent::__get($key); 
    } 
} 

$l = new location(); 
echo $l->obj->what . "\n"; 

$u = new user(); 
echo $u->obj->what . "\n"; 

echo $l->obj->what . "\n"; 
echo $u->obj->what . "\n"; 

这导致

creating location 
creating user 
location 
user 
+0

没错,这就是不知我的解决方案,这里的问题是,这个$ - > _ OBJ ==因为类没有一个叫_obj成员空总是正确的。这基本上就是你不得不问孩子课你有这个对象了。这样,每次我想访问一个成员时,它都会继续创建对象。 – samy 2012-01-13 11:32:20

+0

好 - 没有。查看输出 - 对象创建一次,第二次仅获取对象。 – bububaba 2012-01-13 11:37:23

+0

好吧,谢谢,问题是,我的成员私人所以母亲不能更新他们:)谢谢! – samy 2012-01-13 17:48:45

0

如果你想知道__get()方法中(通过许多类之间共享扩展)什么是一流的,它被称为上使用get_called_class的对象。

+0

肯定的,但只会交给我的课,我需要某事像get_calling_object,类本身并不能帮助。我不是在谈论静态方法:& – samy 2012-01-13 10:21:11

+0

与在父类中使用“$ this”有什么不同?看到我更新的答案。 – bububaba 2012-01-13 10:36:19

相关问题