天天看點

PHP内置攔截器初步介紹

PHP提供了内置的攔截器(intercepter),它可以攔截發送到未定義的屬性或者方法的消息。它也被稱為重載。不過我們為了避免和java和c++中的重載歧義還是叫攔截器。

攔截器可以是類更加完善和安全。對于調用的未知的屬性或者方法可以自定義的處理。不管是自己猜測處理或者傳回自定義的資訊。

<?php  

/** 

 * PHP5中攔截器學習測試 

 * __get( $property ) 通路未定義的屬性時候被調用 

 * __set( $property, $value) 給未定義的屬性指派時被調用 

 * __isset( $property ) 給未定義的屬性調用isset()時候被調用 

 * __unset( $property ) 給未定義的屬性調用unset()的時候被調用 

 * __call( $method, $arg_array ) 調用未定義的方法時候被調用 

 *  

 */ 

error_reporting(E_ALL); 

class person { 

    public $name; 

    public $age; 

    public function __get( $property ) { 

        return null; 

    } 

    public function __set( $property, $value) { 

    public function __isset( $property ) { 

        return false; 

    public function __unset( $property ) { 

        return true; 

    public function __call( $method,$arg_array ) { 

        return $arg_array; 

    public function initialize($name,$age) { 

        $this->name = $name; 

        $this->age = $age; 

$person = new person(); 

$person->sex; //傳回null 因為類中沒有定義這個屬性 

isset($person->age); //如果類中有這個屬性 但是沒有指派 那麼不會 不會走__isset 會直接傳回false或者true 

$person->sex = 'male';//如果對一個不存在的屬性定義那麼會調用__get 方法 

$person->init('ZhangSan','20');// 這個會走__call 參數會當作數組 $arg_array傳入 

unset($person->sex);//這裡會調用__unset 方法 

    本文轉自kefirking 51CTO部落格,原文連結:http://blog.51cto.com/phpzf/804700,如需轉載請自行聯系原作者