2012-01-13 71 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

相關問題