2013-10-02 2 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이 있습니다. 이제이 클래스를 확장하는 모든 클래스가이 함수를 상속 받아 사용할 수 있습니다. 하지만 여기서의 toArray를 호출하면 빈 배열이 반환됩니다. 동시에 myNameobjectYou에 호출하면 하위 클래스의 이름이 표시됩니다.

+1

'class you '에'$ yoo'를'private' 대신'protected'로 만들어보세요. –

답변

2

유일한 속성 ($yoo)은 private이므로 toArray()가 정의 된 my에서 액세스 할 수 없습니다.

+0

예, get_object_vars()는 범위에 따라 지정된 객체의 접근 가능 (및 비 정적) 속성을 가져옵니다. doc http://php.net/manual/en/function.get-object-vars.php를 참조하십시오. – Koryonik

관련 문제