php中魔术方法(magic)关键字的使用-__get()和__set()

初学php,每一步都需要自己走,无论前端还是后端太多的坑需要自己爬,感谢那些帮助自己和提示自己的朋友!

 

php中默认的以俩个"_"开头命名的成员方法为魔术方法(magic),我本人理解魔术方法的作用,解决初始化、外部不能访问、不存在的成员变量问题;

常见的魔术方法有:__construct()、destruct()、__get()、__set()等;

初次遇坑(php从入门到精通)书中,给出的案例:

class SportObject{
        
        private $type = '';
        private function __get($name){
            if(isset($this -> $name)){
                echo '变量'.$name.'的值为'.$this -> $name.'<br/>';
            }else{
                echo '变量'.$name.'未定义,初始化为0<br/>';
                $this -> $name = 0;
            }
        }

        private function __set($name, $value){
            if(isset($this -> $name)){
                $this -> $name = $value;
                echo '变量'.$name.'的值为'.$value.'<br/>';
            }else{
                $this -> $name = $value;
                echo '变量'.$name.'未被初始化'.$value.'<br/>';
            }
        }

    }

    $myComputer = new SportObject();

    $myComputer -> type = 'DIY';

    $myComputer -> type;
    $myComputer -> name;

__get()方法的关键字是用的private, 但调用不可访问变量时,虽然能够正常使用,但是会抛出警告,我郁闷,最初以为是访问到了私有变量,但是发现class外部并没有明显访问,翻开书中对__get()的解释发现,当外部访问不可以访问的成员变量和不存在的变量(对象)会自动调用__get(),这是使用private关键字就会抛出警告了,则需改用public;这里强调的是当访问不存在或者不能访问的成员变量时对象会自动调用__get()方法;

posted on 2016-11-24 11:52  源人  阅读(1018)  评论(0)    收藏  举报

导航