首頁  >  文章  >  php類魔術方法

php類魔術方法

无忌哥哥
无忌哥哥原創
2018-06-28 14:26:112048瀏覽

* 1.類別魔術方法:__get(),__set()實作屬性查詢器與設定器

 * 2.魔術方法之前介紹過了,需要特定場景觸發,由物件自動呼叫

 * 3.__get($name): 外部透過物件取得物件私有屬性或不存在的屬性時自動觸發

 * 4.__set($name,$value):外部設定私有屬性或不存在屬性值的時候自動觸發

 * 5.魔術方法可以適用於所有存在或不存在的類別屬性,不需要再為每個屬性建立對應的存取介面

class GirlFriend3 {
    //声明属性
    private $name;
    private $age;
    private $stature;
    private $data=[];
    
    //构造方法
    public function __construct($name='',$age=0,array $stature=[]) 
    {
        $this->name = $name;
        $this->age = $age;
        $this->stature = $stature;
    }
    
    //魔术方法:查询器
    public function __get($name)
    {
//        return $this->$name;
        //加入检测:访问不存在的属性时给出提示信息
//        return isset($this->$name)?$this->$name:'无此属性';
        
        //如果类中添加一个自定义的数据收集器$data,就从这里取值
        $msg = null;
        if (isset($this->$name)) {
            $msg = $this->$name;
        } elseif (isset($this->data[$name])) {
            $msg = $this->data[$name];
        
        } else {
            $msg = '无此属性';
        }
        
        return $msg;
    }
    
    //魔术方法:设置器
    public function __set($name, $value)
    {
        //不做检测直接设置
//        $this->$name = $value;
        
        //完善设置器,实现对不存在属性的创建
        //如果访问的是已存在的属性,则直接输出
        if (isset($this->$name)) {
            $this->$name = $value; //输出属性
        } else {
            //如果属性不存在,则创建它并保存到类属性$data数组中
            $this->data[$name] = $value;
        }
    }
}
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn