• 魔术方法


    魔术方法可以拦截用户调用没有定义或无法访问的方法或访问属性,对这些操作进行相应的处理

    在开发框架中经常用到,因为不能每个调用都对应一个方法,所以要使用魔术方法统一处理,提高应用处理问题的能力

    <?php
    //某些情况下会自动调用的方法称为魔术方法
    class Human{
        private $money=1000;
        protected $name="lisi";
        public $age=21;
        protected function tomoney(){
            echo $this->money;
        }
        public function cry(){
            echo "哇哇";
        }
        //魔术方法__get($p){}在你调用实例化对象的无法访问(未定义或没有权限)
        //的属性是会调用这个方法,参数$p为你要访问的属性
        public function __get($property){
            echo "你想得到无法访问的",$property,"属性","<br/>";
        }
        //魔术方法__set($k,$v){}在你想设置无法访问的属性时(未定义或没有权限)调用此方法,
        //参数$k为你要改变那个属性的属性名,$v是要改变成哪个值
        public function __set($key,$value){
            echo "你想修改没有权限的",$key,"的属性","<br/>";
            echo "你修改的值为",$value,"<br/>";
        }
        //__isset($property){}当使用isset()方法检测无法访问的属性时,调用这个方法来判断,isset()的返回值
        //是该魔术方法的返回值,所以并不代表不在,具体要看该魔术方法的设置
        public function __isset($property){
            echo "你想判断",$property,"是否存在","<br/>";
            return true;
        }
        //当你要销毁无法访问的属性时调用
        public function __unset($property){
            echo "你要销毁",$property,"对象","<br/>";
        }
        //当你调用无法访问的方法时调用此方法,$method为方法名,$argument为所有参数的数组
        public function __call($method,$argument){
            echo "你想调用函数",$method,"参数为","<br/>";
            print_r($argument);
            echo "<br/>";
    
        }
        //当你要静态调用无法访问的函数时,调用此函数,静态调用是  类名::方法名();
        public static function __callStatic($method,$argument){
            echo "你想静态调用",$method,"方法","<br/>";
            echo "参数为";
            print_r($argument);
            echo "<br/>";
        }
    }
    $lisi=new Human();
    $key=$lisi->money;
    $lisi->tomoney();
    $lisi->header=1;
    if(isset($lisi->leg)){
        echo "有leg属性","<br/>";
    }else{
        echo "没有leg属性","<br/>";
    }
    unset($lisi->money);
    Human::nihao(1,2,3,4);
    ?>
    

     天气预报小测试

    <?php
    class tianqi{
        public function __call($method,$argument){
            echo $method,"天气预报";
        }
    }
    $var=$_GET["method"];
    $tianqi=new tianqi();
    $tianqi->$var();
    
    ?>
    
  • 相关阅读:
    刚体
    Unity3D游戏开发之数据持久化PlayerPrefs的使用
    用AudioSource.PlayClipAtPoint播放音效
    按非降序建立n个元素的线性表
    Unity中的Transform.SetParent()API
    带头结点的两个链表La,Lb,将两个链表合并到La中,并且不破坏Lb的结构
    不带头结点的两个链表合并为一个链表
    二叉树的相关操作(c语言)
    关于ajax请求数据,并将数据赋值给全局变量的一些解决方法
    SummerVocation_Leaning--java动态绑定(多态)
  • 原文地址:https://www.cnblogs.com/lzzhuany/p/4749088.html
Copyright © 2020-2023  润新知