美文网首页
php中的__get()和__set()魔术方法理解

php中的__get()和__set()魔术方法理解

作者: 吕艳凯 | 来源:发表于2019-12-03 17:44 被阅读0次
    class Node{
    
        private $node;
        private $next;
        
        //使用构造函数直接为私有变量赋值
        public function __construct($node){
            $this->node = $node;
        }
        
        //采用__set魔术方法为变量赋值,当调用$obj->任一属性时,会自动调用该魔术方法进行赋值
        public function __set($property_name,$value){
            //注意这里是$this->$property_name而不是$this->property_name
            //是因为如果是$this->property_name,则表示是为当前类property_name是属性赋值了,而property_name属性是不存在的,就会报错
            //$this->$property_name的意思是指,利用$property_name作为一个变量表示需要真正赋值的属性,这样才能实现魔术方法为任一属性赋值的通用性
            //也就是说当在使用类的对象赋值属性时$objNode->next,变量$property_name为next,其实在最后执行时就是$this->next = $value;
            $this->$property_name = $value;
        }
        
        //采用__get魔术方法为变量取值,当调用$obj->任一属性时,会自动调用该魔术方法进行取值
        public function __get($property_name){
            //这里与__set一样为$this->$property_name
            return $this->$property_name;
        }
    
    }
    
    $objNode = new Node(1);
    echo $objNode->node;
    echo "\n";
    $objNode->next = 2;
    echo $objNode->next;
    echo "\n";
    

    输出结果:


    结果

    相关文章

      网友评论

          本文标题:php中的__get()和__set()魔术方法理解

          本文链接:https://www.haomeiwen.com/subject/techgctx.html