zoukankan      html  css  js  c++  java
  • 魔术方法

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

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

    <?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-控制枪口的朝向代码》
    《Unity3D-鱼的方向 鱼的游动 控制代码》
    《unity3d-随机设置一个物体的scale的方法》
    《Unity3d-在地图中随机生成一个物体的代码》
    《Unity3D-控制检测碰撞以后触发的事件之敌人的攻击行为》
    《Unity3D-播放被打中的时候粒子的特效的代码》
    《Unity3D-敌人血条或者玩家血条控制的代码》
    《Unity3D-自动寻路功能的实现》
    Unity 行首不出现中文标点
    Unity 多级下拉菜单
  • 原文地址:https://www.cnblogs.com/lzzhuany/p/4749088.html
Copyright © 2011-2022 走看看