• 技术文章 >头条

    php类魔术方法

    无忌哥哥无忌哥哥2018-06-28 14:26:11原创1467
    * 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核实处理。
    上一篇:PHP中文网带你看php构造方法与访问控制 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 2023,正式进入 PHP8 普及元年!• PHP增势迅猛!2022全球最受欢迎的8种编程语言• 【整理推荐】值得收藏的8个实用PHP库• 【整理分享】7个有趣又实用的开源GitHub项目• 三年面试经验分享:前端面试的四个阶段和三个决定因素
    1/1

    PHP中文网