博客列表 >魔术方法:__call()和__callStatic()

魔术方法:__call()和__callStatic()

Serendipity-Ling
Serendipity-Ling原创
2018年01月12日 16:16:481250浏览
<?php
/**
 * 魔术方法:__call()和__callStatic()
 * __call($name, $arguments):调用类中不存在的动态方法,自动调用
 * __callStatic($name, $arguments):调用类中不存在的静态方法,自动调用
 * 以上二个魔术方法实现了方法的重载
 */
require 'call_back.php';
class Call_1
{
    //调用动态方法
    public function __call($name, $arguments)
    {
        //打印出方法名和参数,参数是在数组$arguments中
//        return '<p>方法名:'.$name.',参数是:('.implode(',',$arguments).')</p>';
        //跨类调用方法
        //call_user_func_array($method,$array_param);
//        print_r($arguments);
        //call_user_func_array([对象,'方法名',参数数组])
       return call_user_func_array([(new Call_2()),$name],$arguments);
    }
    //调用静态方法
    public static function __callStatic($name, $arguments)
    {
        return call_user_func_array(['Call_2',$name],$arguments);
    }
}
//动态
$obj = new Call_1();
echo $obj->hello(1,2,3);//输出6,成功调用了Call_2类中的方法
echo '<hr>';
//静态
echo $obj->add(1,100);//结果输出5050,成功调用了Call_2类中的add()方法

调用的类

<?php
/**
 * 调用文件
 */
class Call_2
{
    private static $c;
    public function hello($arg1,$arg2,$arg3)
    {
            return $arg1+$arg2+$arg3;
    }
    //静态方法
    public static function add($a,$b)
    {
        for ($i=$a; $i<=$b;$i++)
        {
            self::$c+=$i;
        }
        return self::$c;
    }
}


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议