正如php手册所说
混合call_user_func(可调用$ callback [,混合$参数[,混合 $ ...]])
我开始测试这个功能:
示例1:
<?php
function my_callback_function() {
echo 'hello world!';
}
call_user_func('my_callback_function');
?>
示例1返回true。那么第二个参数($参数)怎么样?
示例2:
namespace Test;
class Foo
{
static public function bar()
{
echo "Hello world!\n";
}
}
call_user_func(__NAMESPACE__ . '\Foo::bar'); // true
call_user_func(array(__NAMESPACE__ . '\Foo', 'bar')); // true
call_user_func('Test\Foo::bar'); // false <error>
在这个例子中,我省略了第二个参数,他返回TRUE。
示例3:
class Foo
{
public function bar()
{
echo "Hello world";
}
}
if (is_callable(array('foo', 'bar'))) {
call_user_func(array('foo', 'bar'));
}
很困惑,因为文档说“调用第一个参数给出的回调”
上面的所有函数示例都没有任何参数,但是文档说他回到了第一个参数。如果那个参数不存在,怎么回事?
答案 0 :(得分:0)
代码call_user_func( array('foo','bar') )
使用单个参数调用call_user_func()
,该参数为array
,但仍为单个参数。
答案 1 :(得分:0)
任何通过is_callable测试的内容都有资格传递给call_user_func和call_user_func_array的第一个参数。这包括:
函数名称为字符串
function test(){
echo "Hello World";
}
call_user_func("test");
静态方法
class A {
public static function test(){
echo "Hello World";
}
}
call_user_func(array("A", "test"));
实例方法
class A {
public function test(){
echo "Hello World";
}
}
$a = new A();
call_user_func(array($a, "test"));
匿名函数/闭包
$a = function(){ echo "Hello World"; }
call_user_func($a);
另请注意,在上面的示例中:
call_user_func('Test\Foo::bar');
产生错误......这是因为它在Test名称空间中运行,所以函数被解析为\Test\Test\Foo::bar
如果你已经完成了这将有效:
call_user_func('\Test\Foo::bar');