[{"data":1,"prerenderedAt":60},["ShallowReactive",2],{"article-61":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":17,"is_open":17,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":18,"update_time":19,"image_id":20,"url":13,"member_id":14,"cate_name":21,"prev":22,"next":25,"tags":28,"words":31,"read_time":32,"comments":14,"cover":33,"relevant":34},61,"PHP回调函数call_user_func和call_user_func_array使用","php","最近将项目的php版本从5.6升级到7.1+后，由于php5中的部分功能在php7中不能使用，比如如下代码$db->$vals[0]($vals[1]),在php5中可以正常使用，php7中就不能使用了，于是将其代码改为了call_user_func_array(array($db, $vals[0]), $vals[1])进行调用，完美兼容php5和php7.",2,"最近将项目的php版本从5.6升级到7.1+后，由于php5中的部分功能在php7中不能使用，比如如下代码`$db->$vals[0]($vals[1])`,在php5中可以正常使用，php7中就不能使用了，于是将其代码改为了`call_user_func_array(array($db, $vals[0]), $vals[1])`进行调用，完美兼容php5和php7.\n\n以下是call_user_func和call_user_func_array方法的使用方法介绍\n```php\ncall_user_func($func);\n```\n\n调用一个回调函数处理字符串,\n\n可以用匿名函数，可以用有名函数，可以传递类的方法，\n\n用有名函数时，只需传函数的名称\n\n用类的方法时，要传类的名称和方法名\n\n传递的第一个参数必须为函数名，或者匿名函数，或者方法\n\n其他参数，可传一个参数，或者多个参数，这些参数会自动传递到回调函数中\n\n而回调函数，可以通过传参，获取这些参数\n\n返回回调函数处理后的结果\n\n1、调用普通函数\n\n```php\n\u002F\u002F先引用后增加\nfunction a($b){\n    echo $b + 1;\n}\ncall_user_func('a', 1);#结果显示2\n\n\u002F\u002F先增加后引用\ncall_user_func(function($b){\n    echo $b + 1;\n}, 1);#传给匿名函数的参数为1，执行的结果为2\n```\n\n2、调用类的方法(包括类的静态方法和实例对象方法)\n\n```php\n\u002F\u002F1、调用没有命名空间的类的方法\nclass A(){\n    public function bb($a){\n        echo $a + 1;\n    }\n    \n    public static function cc($i){\n        echo $i + 2;\n    }\n}\n\n\u002F\u002F实例对象后调用\n$obj = new A;\ncall_user_func(array($obj, 'bb'), 1);\u002F\u002F显示2\n\u002F\u002F静态方法使用如下方法调用\ncall_user_func(array('A', 'cc'), 1);\n\u002F\u002F或\ncall_user_func('A::cc', 1);\n\n```\n\n```php\n\u002F\u002F2、调用有命名空间的类的方法\nnamespace Demo;\nclass A(){\n    public function _func(){\n        print_r(func_get_args());\u002F\u002F打印函数的参数\n    }\n    \n    public static function cc($i){\n        echo $i + 2;\n    }\n}\n\u002F\u002F针对普通方法\n$obj = new \\Demo\\A;\ncall_user_func(array($obj, '_func'), 'a', 1, 2, 'b');\n\u002F\u002F针对静态方法，两种调用方式\n\u002F\u002F1、可以用array(__NAMESPACE__.'\\类名','方法名')传递类方法，也就是：array('命名空间\\类名','方法名')\ncall_user_func(array(__NAMESPACE__.'\\A','cc'), 10);\n\u002F\u002F2、也可以用__NAMESPACE__.'\\类名::方法名'    ···传递类方法，也就是：'命名空间\\类名::方法名'\ncall_user_func('Demo\\A::cc', 10);\n```\n\ncall_user_func_array函数和call_user_func很相似，只不过是换了一种方式传递了参数，让参数的结构更清晰\n\n```php\ncall_user_func_array($func, $arr);\n```\n\n1、简单函数方法调用\n\n```php\nfunction a($a, $b){\n    echo $a + $b + 10;\n}\ncall_user_func_array('a', array(1, 2));\u002F\u002F13\n```\n\n2、调用类的方法\n\n```php\n\u002F\u002F无命名空间的类方法调用\nclass A(){\n    public function bb($a, $c){\n        echo $a + $c + 10;\n    }\n    \n    public static function cc($a, $b){\n        echo $a + $b + 20;\n    }\n}\n\u002F\u002F非静态方法\n$obj = new A;\ncall_user_func_array(array($obj, 'bb'), array(1, 3));\u002F\u002F14\n\u002F\u002F静态方法调用\ncall_user_func_array(array('A', 'bb'), array(1, 3));\n\u002F\u002F或\ncall_user_func_array('A::cc', array(2, 5));\u002F\u002F27\n```\n\n```php\n\u002F\u002F有命名空间的类方法调用\nnamespace Demo;\nclass A(){\n    public function bb($a, $c){\n        echo $a + $c + 10;\n    }\n    \n    public static function cc($a, $b){\n        echo $a + $b + 20;\n    }\n}\n\u002F\u002F非静态方法\n$obj = new A;\ncall_user_func_array(array($obj, 'bb'), array(1, 3));\u002F\u002F14\n\u002F\u002F静态方法调用\ncall_user_func_array(array('\\Demo\\A', 'bb'), array(1, 3));\n\u002F\u002F或\ncall_user_func_array('\\Demo\\A::cc', array(2, 5));\u002F\u002F27\n```\n\n##### 请注意，传入call_user_func()和call_user_func_array()的参数不能为引用传递",null,0,532,"",1,"2019-07-23 16:40:28","2026-04-19 15:12:12",137,"PHP",{"id":23,"title":24},60,"解决Nginx自动忽略header包含下划线参数方法",{"id":26,"title":27},62,"内网使用Composer",[29],{"id":30,"name":21},25,1547,3,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002Fe9\u002Fd3ec2fd731439d21a2d4cc8746b39f.jpg",[35,40,45,50,55],{"id":36,"title":37,"create_time":38,"description":39},93,"PHP执行Python脚本解压，压缩文件夹操作","2020-08-06 14:59:05","PHP是有解压缩类文件的，但在实际项目中，用户方使用Python脚本压缩，很容易出现中文解压乱码，导致文件内容丢失的情况，本文主要介绍PHP执行Python脚本解压缩出现的问题以及解决方法",{"id":41,"title":42,"create_time":43,"description":44},92,"PHP对图片的处理","2020-07-30 15:53:38","图片处理函数功能：缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色处理并保存历史记录的思路：当有图片有改动时自动生成一张新图片",{"id":46,"title":47,"create_time":48,"description":49},96,"PHP中字符串跟0做比较永远是true","2021-02-04 16:16:27","最近在项目中做数据对比的功能，发现一个特殊的情况，0跟任何字符串做比较永远返回true，特意了解了一下。",{"id":51,"title":52,"create_time":53,"description":54},13,"Win系统下配置PHP链接Oracle","2019-01-17 22:23:36","该文章内容主要介绍window系统下，php连接oracle的配置。",{"id":56,"title":57,"create_time":58,"description":59},103,"面向对象三大特性五大原则 + 低耦合高内聚[转载]","2021-10-31 23:18:58","面向对象的三大特性是\"封装、\"多态\"、\"继承\"，五大原则是\"单一职责原则\"、\"开放封闭原则\"、\"里氏替换原则\"、\"依赖倒置原则\"、\"接口分离原则\"。",1783431663341]