Heim  >  Artikel  >  PHP-Magie-Methode

PHP-Magie-Methode

无忌哥哥
无忌哥哥Original
2018-06-28 14:26:112047Durchsuche

* 1. Magische Methoden: __get(), __set() zum Implementieren von Attributabfragen und -settern

* 2. Magische Methoden wurden bereits eingeführt und müssen durch bestimmte Szenarien ausgelöst und automatisch aufgerufen werden object

* 3.__get($name): Wird automatisch ausgelöst, wenn die privaten Attribute oder nicht vorhandenen Attribute des Objekts extern über das Objekt abgerufen werden

* 4.__set($name,$value ): Extern gesetzt privat Wird automatisch ausgelöst, wenn ein Attribut oder Attributwert nicht vorhanden ist

* 5. Die magische Methode kann auf alle vorhandenen oder nicht vorhandenen Klassenattribute angewendet werden, und es ist nicht erforderlich, ein entsprechendes zu erstellen Zugriffsschnittstelle für jedes Attribut

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;
        }
    }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn