2013-05-21 4 views
2

__unset()이 작동하지 않는 이유를 이해할 수 없었습니다. PHP Magic Method __unset()이 unset 함수를 호출 할 때 작동하지 않습니다.

class myclass { 
    public $name = array(); 

    public function __set($arraykey, $value){ 
     $this->name[$arraykey] = $value; 
    } 

    public function __isset($argu){ 
     return isset($this->name[$argu]); 
    } 

    public function __unset($argu){ 
     echo "Working: Unset $this->name[$argu]"; 
     unset($this->name[$argu]); 
    } 
} 

$obj = new myclass; 
$obj->name = 'Arfan Haider'; 

var_dump(isset($obj->name)); 

unset($obj->name); 

은 내가 unset() 함수가 호출 될 때마다, 다음 매직 방법 __unset()가 자동으로 호출 및 변수 설정을 해제 것을 읽었다.

위 코드에서 unset을 사용하지만 __unset()을 호출하지 않습니다. 왜? 마법 방법을 이해하는데 뭔가 빠졌습니까 __unset()?

답변

5

마법의 방법 __set, __get, __isset액세스 속성을 액세스 할 때 __unset 만 전화를받을. 즉, 개인 특성, 보호 특성 (하위 클래스 외부에서 액세스 됨) 또는 작성되지 않은 특성을의 L합니다.

호출 내부 변수 $_name 대신 $name, 또는 문제가 해결됩니다 private$name 또는 protected 대신 public 설정.

: 그들은 연장 클래스에서 액세스 할 필요가있을 때

는 만 protected 속성이나 기능을 사용한다 -해서 사용하지 마십시오.() 해제가 액세스 속성을 사용하는 경우

4

__unset()가 호출됩니다.

(source) 따라서 만 inaccesible (개인 보호) 소품에 효과적 일 수있다.