php -- 魔术方法 之 调用方法:__call()、__callStatic()

方法重载:当调用一个不存在或者权限不够的方法的时候,会自动调用__call()方法

public function __call($name,$args){}  :用对象调用方法

public static function __callStatic($name,$args){}: 用类调用静态方法

  $name:被调用的方法名

  $args:被调用的方法的参数列表数组

<?php

    //PHP方法重载
    class Person{
        //方法
        private function test(){
            echo __METHOD__;
        }

        protected static function test1(){
            echo __METHOD__;
        }

        //增加魔术方法
        //有两个参数:第一个是方法名,第二个是参数数组
        public function __call($name,$args){
            //var_dump($name);//方法名字
            //var_dump($args);//参数数组
            //定义允许访问列表
            $allow = array('test');

            if(in_array($name,$allow))
                $this->$name();                        //可变方法
            else return false;
        }

        //增加一个静态方法的访问
        public static function __callStatic($name,$args){
            $allow = array('test1');

            if(in_array($name,$allow))
                self::$name();                        //可变方法
            else return false;
        }
    }

    echo '<pre>';

    //实例化
    $person = new Person;

    //访问私有方法
    //没有魔术方法之前
    //$person->test();            //出错
    //Person::test1();            //出错

    $person->test();            //有了__call魔术方法,且允许访问
    var_dump($person->test2());    //false

    Person::test1();
原文地址:https://www.cnblogs.com/hf8051/p/4661566.html