博主信息
博文 30
粉丝 0
评论 0
访问量 28163
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
9.4方法重载与call_user_func_array()
归宿的博客
原创
1182人浏览过
  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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学