PHP 函数之 call_user_func & call_user_func_array

call_user_func_array (callable $callback, array $param_arr)

参数1: 调用一个回调函数,

参数2: 数组参数是回调函数的参数.

call_user_func(callable $callback, $mixed $parameter, $mixed $...)

参数1:调用的回调函数

参数2-n:回调函数的参数.

比较这两者的不同哦. 前者的第二个参数必须是 数组.

情况一:调用普通的函数.

<?php
function barber($type)
{
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?> 

这里,第一个参数直接指定函数的名称.

<?php
function barber($type)
{
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func_array('barber', array("mushroom"));
call_user_func_array('barber', array("shave"));
?> 

还是比较一下这两者之间的不同.

看出来的请继续.

情况二: 调用类中的静态函数.

下面是call_user_func_arr

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}
}
echo call_user_func_array(__NAMESPACE__.'\F::showName', array('vein'));
echo call_user_func_array(array(__NAMESPACE__.'\F', 'showName'), array('vein'));
$f = new F();
echo call_user_func_array(array($f, 'showName'), array('vein'));

下面是call_user_func

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}
}
echo call_user_func(__NAMESPACE__ . '\F::showName','vein');
echo call_user_func(array(__NAMESPACE__ . '\F','showName'),'vein');

$f = new F();
echo call_user_func(array($f, 'showName'),'vein');	

情况三:动态方法调用

call_user_func

namespace Foo;
class F {
	public function showAge ($age) {
		return $age + 100;
	}
}
call_user_func(__NAMESPACE__ . '\F::showAge',23);

这里要注意一点,如果这样调用的话,系统会报错,提示

call_user_func() expects parameter 1 to be a valid callback, non-static method Foo\F::showAge() should not be called s

tatically

解释一下: 这个函数的第一个参数必须是 有效的回调函数, 非静态的方法showAge() 是不允许调用的.

需要的解决方案是:

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}

	public function showAge ($age) {
		return $age + 100;
	}
}
$f = new F();
echo call_user_func(array($f, 'showAge'),23);

对于这样的动态函数的调用,必须提前进行对象实例化,

然后将实例化之后的对象传入函数作为第一个参数.

call_user_func_array :

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}

	public function showAge ($age) {
		return $age + 100;
	}
}
$f = new F();
echo call_user_func_array(array($f, 'showAge'),array(23));

这样也是可行的.

总结一下: call_user_func_array 和 call_user_func 两个函数基本上是类似的,只是在调用上传递参数时存在一些差异.

记住一点,call_user_func_array 传递的第二个参数必须是数组,

call_user_func 传递的第二个参数可能是数组.如果是多个参数的话,还是需要以列表的形式列出.

PHP 函数之 call_user_func & call_user_func_array,布布扣,bubuko.com

时间: 2024-09-30 10:29:37

PHP 函数之 call_user_func & call_user_func_array的相关文章

php函数: call_user_func()和call_user_func_array() 使用详解

call_user_func 该函数允许直接调用自己写的函数,可以直接传入一些参数. 使用方法1:给自己写的函数传入参数,一个特别的调用函数的方法. 1 <?php 2 3 funciotn test1($a,$b){ 4 echo $a; 5 echo $b; 6 } 7 8 call_user_func('test1',"11","22"); 9 call_user_func('test1',"33","44");/

PHP 函数之 call_user_func &amp;amp; call_user_func_array

call_user_func_array (callable $callback, array $param_arr) 參数1: 调用一个回调函数, 參数2: 数组參数是回调函数的參数. call_user_func(callable $callback, $mixed $parameter, $mixed $...) 參数1:调用的回调函数 參数2-n:回调函数的參数. 比較这两者的不同哦. 前者的第二个參数必须是 数组. 情况一:调用普通的函数. <? php function barber

简单理解call_user_func和call_user_func_array两个函数

call_user_func():调用一个回调函数处理字符串, 可以用匿名函数,可以用有名函数,可以传递类的方法, 用有名函数时,只需传函数的名称 用类的方法时,要传类的名称和方法名 传递的第一个参数必须为函数名,或者匿名函数,或者方法 其他参数,可传一个参数,或者多个参数,这些参数会自动传递到回调函数中 而回调函数,可以通过传参,获取这些参数 返回回调函数处理后的结果 ①传递函数名,通过回调函数的形参获取call_user_func传参数的情况 <?php //先引用后增加 function

php回调函数call_user_func和call_user_func_array详解

call_user_func($fun); call_user_func 函数类似于一种特别的调用函数的方法,使用方法如下: 1.调用 普通函数: <?php function a($b, $c) { echo $b; echo $c; } call_user_func('a', "111", "222"); call_user_func('a', "333", "444"); //显示 111 222 333 444

php学习之道:call_user_func和call_user_func_array的用法

call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] ) 调用第一个参数所提供的用户自定义的函数. 返回值:返回调用函数的结果,或FALSE. example : Php代码   <?php function eat($fruit) //参数可以为多个 { echo "You want to eat $fruit, no problem"; } call_user_func('eat', 

php中call_user_func 与 call_user_func_array的使用

call_user_func()是利用回调函数处理字符串,call_user_func_array是利用回调函数处理数组. // 1. 调用自定义函数 function test($a, $b) { echo $a + $b; } // 字符串传参 call_user_func('test', 1, 2); // 3 // 数组式传参 call_user_func_array('test', [1, 2]); // 3 // 2. 调用匿名函数 call_user_func(function($

php函数call_user_func、call_user_func_array使用方法

使用方法: 1. function aa() { echo 'cjy'; } call_user_func('aa'); 2. class A { static function aa($a, $b, $c) { echo "{$a}{$b}{$c}"; } } call_user_func('A::aa', 1, 2, 3); 3. class A { static function aa($a, $b, $c) { echo "{$a}{$b}{$c}"; }

php中调用用户自定义函数的方法:call_user_func,call_user_func_array

看UCenter的时候有一个函数call_user_func,百思不得其解,因为我以为是自己定义的函数,结果到处都找不到,后来百度了一下才知道call_user_func是内置函数,该函数允许用户调用直接写的函数并传入一定的参数,不可谓不强大,总结一下,写到这篇日志里面吧. 先放上来别人的例子吧: call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: function a($b,$c) { echo $b; echo $c; } call_user_func('a',

PHP函数详解:call_user_func()使用方法

UCenter源代码里有一个函数call_user_func,开始以为是自己定义的函数,结果到处都找不到.后来才知道call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法. call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: <?php function nowamagic($a,$b) { echo $a; echo $b; } call_user_func('nowamagic', "11