2013-10-02 26 views
2

我不知道我是否嚴重誤解了OOP的概念,或者我在這裏實現了錯誤。可以請別人解釋什麼,我做錯了Php get_object_vars調用子類不工作

<?php 

class my { 
    public function myName(){ 
     return get_class($this); 
    } 
    public function toArray() { 
     $retArray=array(); 
     $class_vars = get_object_vars($this); 

     foreach ($class_vars as $name => $value) { 
      $retArray[$name]=$value; 
     } 
     return $retArray; 
    } 
} 
class you extends my { 
    private $yoo; 
    public function __construct($var1) { 
     $this->yoo=$var1; 
    } 
} 
$objectYou = new you("I am pri"); 
echo '<pre>'; 
echo $objectYou->myName(); 
echo '<br>'; 
print_r($objectYou->toArray()); 
echo '</pre>'; 
?> 

輸出是:

陣列()

什麼,我想在這裏是有超類my其中有一個功能toArray將對象轉換爲數組。現在所有擴展這個類的類都應該繼承這個函數並且可以使用它。但在這裏調用數組objectYou返回空數組。 objectYou同時調用myName顯示子類的名稱。

+1

嘗試在'class you'中將'$ yoo'設置爲'protected'而不是'private'。 –

回答

2

唯一的屬性($yoo)是私有的,因此無法從my訪問,其中定義了toArray()。

+0

是的,get_object_vars()根據作用域獲取給定對象的ACCESSIBLE(和非靜態)屬性。請參閱文檔http://php.net/manual/en/function.get-object-vars.php – Koryonik