PHP中的回调函数是怎么实现的?
发布网友
发布时间:2022-04-19 20:08
我来回答
共1个回答
热心网友
时间:2022-04-06 02:26
第一种,
常规的php全局函数
function
test($echo)
{
echo
$echo,
"\n";
}
$param
=
array("www.zeroplace.cn");
call_user_func_array(test,
$param);
call_user_func_array("test",
$param);
输出:
www.zeroplace.cn
www.zeroplace.cn
两种调用方式都可以成功调用,
说明call_user_func_array调用常规php局函数时的第一个参数可以为函数本身,也可以为表示函数名的字符串。
第二种,
类的静态方法
class
TestC
{
static
function
test($echo)
{
echo
$echo,
"\n";
}
}
$param
=
array("www.zeroplace.cn");
call_user_func_array(array(TestC,
"test"),
$param);
call_user_func_array(array("TestC",
"test"),
$param);
输出:
www.zeroplace.cn
www.zeroplace.cn
这时传第一个参数的时候传了一个数据。数组的第一个元素可以为类本身,也可以为类名的一个字符串。第二个元素则是一个表示方法名的字符串。
第三种,对象的方法
class
TestC
{
protected
$_a
=
"hello
word";
function
test($echo)
{
$this->_a
=
$echo;
}
function
show()
{
echo
$this->_a,
"\n";
}
}
$param
=
array("www.zeroplace.cn");
$obj
=
new
TestC();
call_user_func_array(array($obj,
"test"),
$param);
$obj->show();
$obj->test("WEB应用开发");
$obj->show();
输出:
www.zeroplace.cn
WEB应用开发
这里是调用一个对象的方法。从test方法中设置对象的_a成员,然后通过show方法将它显示出来,以验证call_user_func_array调用方法时可以正确等到$this指针。这里输出的结果表明已经上面的方法是奏效的。其实回调对象的方法还有一种更加简单的方法,直接$obj->{$method}()就可以调用,只要{$method}是存在的。