PHP 特殊方法 __set()、__get()

 <?php
    header("Content-type: text/html; charset=utf-8"); 
    class person{
        //成員屬性
        private $name;
        private $age = 20;
        //成員方法
        function username($name){
            return $this->name=$name;
        }
        //__set()方法用來設置私有屬性
        function __set($property_name, $value) { 
        echo "在直接設置私有屬性值的時候,自動調用瞭這個 __set() 方法為私有屬性賦值<br />";
        $this->$property_name = $value; 
        }
 
        //__get()方法用來獲取私有屬性
        function __get($property_name) {  
        echo "在直接獲取私有屬性值的時候,自動調用瞭這個 __get() 方法<br />";
        }
    }
    $obj= new person();
    echo $obj->username("張三");
    echo "<hr/>";
    $obj->name = "李四";//在直接設置私有屬性值的時候,自動調用瞭這個 __set() 方法為私有屬性賦值
    echo "<hr/>";
    echo $obj->age;//在直接獲取私有屬性值的時候,自動調用瞭這個 __get() 方法,不設置get特殊方法就會報下面的錯
    //echo $obj->age;//當成員屬性或者方法前有private修飾,不能在類外訪問。否則報錯如下
    /*
     Fatal error: Cannot access private property person::$age in D:\wamp\www\ajax\index.php on line 23
    */
?>

 

發佈留言