博客列表 >9.4方法重载与call_user_func_array()

9.4方法重载与call_user_func_array()

归宿的博客
归宿的博客原创
2018年09月11日 10:05:17994浏览
  1. 方法重载与call_user_func_array()

1)方法重载:

class Test
{
    //普通方法的重载(如果没有__call方法,就不能在外部访问私有方法)
    public function __call($name, $arguments)
    {
//        return $name; //方法名称
//        return $arguments;
        $arrs = implode(',',$arguments);
        return '方法名:'.$name.'<br>参数:'.$arrs;
    }

    //创建一个私有方法
    private function select()
    {
        return __METHOD__;
    }

    //静态方法的重载
    public static function __callStatic($name, $arguments)
    {
        $arrs = implode(',',$arguments);
        return '方法名:'.$name.'<br>参数:'.$arrs;
    }

}
//实例化
$test = new Test;
//访问一个不存在的非静态/普通/动态方法
//echo $test->show();
print_r($test->show('合肥','杭州'));

echo $test->select('staff','id,name,age').'<hr>';

//从类外部访问一个不存在的静态方法
echo Test::assign('html,css,php');

2) call_user_func_array():

//场景一:执行回调函数
//计算两个整数之和
echo call_user_func_array(function($m,$n){return $m+$n;},[10,20]).'<hr>';

//场景二:执行对象方法
class Hello1
{
    public function add($m,$n)
    {
        return $m + $n;
    }
}
//call_user_func_array([对象,'方法'],[参数数组])
//$obj = new Hello1();
//$method = 'add';
//$args = [30,50];
//echo call_user_func_array([$obj,$method],$args),'<br>';
//可以简写:
echo call_user_func_array([(new Hello1()),'add'],[35,40]).'<hr>';

//场景三:执行类中的静态方法
class Hello2
{
    public static function add($m,$n)
    {
        echo $m + $n;
    }
}
//Hello2::add(20,30);   数组[类名,方法],[]
call_user_func_array(['Hello2','add'],[40,20]).'<hr>';

2.后期静态绑定案例

class Db1
{
    public static $pdo = null;
    public static function  connect()
    {
        self::$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }

    public static function query()
    {
        $stmt = self::$pdo->prepare("SELECT `name`,`salary` FROM `staff` LIMIT 3");
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public static function select()
    {
        self::connect();
        return self::query();
    }
}

class Db2 extends  Db1
{
    public static function query()
    {
        $stmt = self::$pdo->prepare("SELECT `name` AS `姓名`,`email` AS `邮箱` FROM `user` LIMIT 3");
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

}
echo '<pre>';
print_r(Db1::select());


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