call_user_func 与call_user_func_array 的使用与区别
1 call_user_func 的使用
1)使用方法直接传递值
function nowamagic($a,$b){
echo $a;
echo $b;
}
call_user_func('nowamagic', "111","222");
2)使用类的方法
class Func{
//静态方法
static public function _func(){
$str = 'THE CLASS NAME IS '.__CLASS__.' AND CLASS STATIC METHOD IS '.__METHOD__;
if(func_num_args()){
//获取函数参数,获取参数也可以通过给方法设置形参来获取,这里只是没给方法设置形参获取参数的情况
$arg = func_get_arg(0);
return $str.' and argument is '.$arg;
}else{
return $str;
}
}
//普通方法
public function __func($num){
return $num ? $num+1:$num;
}
}
//传递类的静态方法,有两种方式
//(1)种,传递····类名::方法名····
var_dump(call_user_func("Func::_func",'hell world'));//这里传递参数
//(2)种,传递类名和方法名的数组
var_dump(call_user_func(array('Func','_func')));//这里没有传参数
$num = 4;
$o = new Func;
//传递类普通方法必须用···数组···传递···该类的对象··和···方法名···
$return = call_user_func(array($o,'__func'),$num);
var_dump($return);
3 使用命名空间的方法
//定义类的命名空间
namespace Home;
class Space{
//静态方法
static public function _call($num){
return $num +=10;
}
//普通方法
public function _func(){
return func_get_args();//返回函数的参数
}
}
//针对静态方法,有两种调用方式
//1.可以用array(__NAMESPACE__.'\类名','方法名')传递类方法,也就是:array('命名空间\类名','方法名')
$return = call_user_func(array(__NAMESPACE__.'\Space','_call'),10);
//2.可以用···· __NAMESPACE__.'\类名::方法名' ···传递类方法,也就是:'命名空间\类名::方法名'
$return1 = call_user_func('Home\Space::_call',100);
var_dump($return);
var_dump($return1);
//针对普通方法,不用传入命名空间即可调用,如下
$o = new Space;
$return = call_user_func(array($o,'_func'),1,2,3,4,5);
var_dump($return);
2 call_user_func_array 的使用
call_user_func 不能传递引用
unction a($b, $c) {
echo $b;
echo $c;
}
call_user_func_array('a', array("111", "222")); //显示 111 222
调用类的内部方法
Class ClassA {
function bc($b, $c) {
$bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("111", "222")); //显示 333
引用
function increment(&$var){
$var++;
}
$a = 0;
call_user_func('increment', $a);
echo $a; //
call_user_func_array('increment', array(&$a)); // You can use this instead 这里注意的地方就是 必须要传引用
echo $a; //
call_user_func 与call_user_func_array 的使用与区别的更多相关文章
- PHP函数call_user_func和call_user_func_array详解
今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的: call_user_func_array (P ...
- call_user_func 和 call_user_func_array用法
说明 call_user_func 和 call_user_func_array 相同:都可以调用函数和类内部的函数,不同:不同的是传递的参数不同,前者是一个参数一个参数传递, 后者是传递array参 ...
- php中call_user_func 与 call_user_func_array的使用
call_user_func()是利用回调函数处理字符串,call_user_func_array是利用回调函数处理数组. // 1. 调用自定义函数 function test($a, $b) { ...
- PHP回调函数call_user_func()和call_user_func_array()的使用
call_user_func():把第一个参数作为回调函数调用 用法:call_user_func ( callable $callback [, mixed $parameter [, mixed ...
- php中call_user_func()与call_user_func_array()区别
call_user_func:把一个参数作为回调函数调用 用法说明: call_user_func ( callable $callback [, mixed $parameter [, mixed ...
- 简单理解call_user_func和call_user_func_array两个函数
call_user_func():调用一个回调函数处理字符串, 可以用匿名函数,可以用有名函数,可以传递类的方法, 用有名函数时,只需传函数的名称 用类的方法时,要传类的名称和方法名 传递的第一个参数 ...
- php自定义函数call_user_func和call_user_func_array详解
看UCenter的时候有一个函数call_user_func,百思不得其解,因为我以为是自己定义的函数,结果到处都找不到,后来百度了一下才知道call_user_func是内置函 call_user_ ...
- php call_user_func和call_user_func_array
首先要看这个页面关于callable类型:http://www.php.net/manual/zh/language.types.callable.php 自 PHP 5.4 起可用 callable ...
- PHP 回调函数call_user_func和 call_user_func_array()的理解
call_user_func(function,param); // 第一个参数是回调函数的函数名,第二个参数是参数 call_user_func函数类似于一种特别的调用函数的方法.其主要有以下的类型 ...
随机推荐
- (七) UVC框架分析
title: UVC框架分析 date: 2019/4/23 19:50:00 toc: true --- UVC框架分析 源码的位置在drivers\media\video\uvc,查看下Makef ...
- Kubernetes之调度器和调度过程
scheduler 当Scheduler通过API server 的watch接口监听到新建Pod副本的信息后,它会检查所有符合该Pod要求的Node列表,开始执行Pod调度逻辑.调度成功后将Pod绑 ...
- Kubernetes实战:目录
一.Docker实战 Docker: 基础介绍 [一] Docker:Docker 性质及版本选择 [三] Docker:网络及数据卷设置 [四] Docker:手动制作镜像 [五] Docker:d ...
- 分库分表后跨分片查询与Elastic Search
携程酒店订单Elastic Search实战:http://www.lvesu.com/blog/main/cms-610.html 为什么分库分表后不建议跨分片查询:https://www.jian ...
- luasocket编译安装遇到的坑
由于需要获得本机的IP地址,所以需要 : local socket = require('socket') local server_hostname = socket.dns.gethostname ...
- [Luogu P2966][BZOJ 1774][USACO09DEC]牛收费路径Cow Toll Paths
原题全英文的,粘贴个翻译题面,经过一定的修改. 跟所有人一样,农夫约翰以宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道 ...
- PLSQL Developer 没有64位版本 + 找不到 msvcr71.dll
由于 PLSQL Developer 没有64位版本,所以在64位系统上运行该程链接64位Oracle时就会报错,笔者为这个问题纠结了好几天,后来通过请教Google + 动手实践,终于搞定了这个问题 ...
- vue适配移动端px自动转化为rem
1.下载lib-flexible 我使用的是vue-cli+webpack,所以是通过npm来安装的 npm i lib-flexible --save 2.引入lib-flexible 在main. ...
- day 23-1 类的命名空间、组合
类的命名空间 类与对象命名空间 类里 可以定义两种属性 静态属性 动态属性 类中的静态变量 可以被对象和类调用对于不可变数据类型来说,类变量最好用类名操作对于可变数据类型来说,对象名的修改是共享的,重 ...
- zabbix监控ssl证书到期时间
监控脚本 cat ssl_check.sh #!/bin/bash # #获取ssl证书的过期时间 #menghao #获取证书的有效时间 time=$(echo | openssl s_client ...