本文目录一览:
php回调函数是什么样子的?靠什么原理运行?
回调函数就是那些自己写的,但是不是自己来调,而是给别人来掉的函数。
就像下面的odd()和even()函数一样。
?php
function odd($var)
{
return($var % 2 == 1);
}
function even($var)
{
return($var % 2 == 0);
}
$array1 = array("a"=1, "b"=2, "c"=3, "d"=4, "e"=5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));//这里把array1的值依次传入到odd这个函数里面,这种方式就称为回调
echo "Even:\n";
print_r(array_filter($array2, "even"));
?
下面这个例子实现函数的回调
?
function fnCallBack($msg1, $msg2)
{
echo 'msg1:'.$msg1;
echo 'br/';
echo 'msg2:'.$msg2;
}
$fnName = 'fnCallBack';//函数名
$params = array('hello', 'world');//将要传入到函数里面的参数
call_user_func_array($fnName, $params);
?
PHP中的回调函数是怎么实现的?
第一种, 常规的php全局函数
function test($echo)
{
echo $echo, "\n";
}
$param = array("");
call_user_func_array(test, $param);
call_user_func_array("test", $param);
输出:
两种调用方式都可以成功调用, 说明call_user_func_array调用常规php局函数时的第一个参数可以为函数本身,也可以为表示函数名的字符串。
第二种, 类的静态方法
class TestC
{
static function test($echo)
{
echo $echo, "\n";
}
}
$param = array("");
call_user_func_array(array(TestC, "test"), $param);
call_user_func_array(array("TestC", "test"), $param);
输出:
这时传第一个参数的时候传了一个数据。数组的第一个元素可以为类本身,也可以为类名的一个字符串。第二个元素则是一个表示方法名的字符串。
第三种,对象的方法
class TestC
{
protected $_a = "hello word";
function test($echo)
{
$this-_a = $echo;
}
function show()
{
echo $this-_a, "\n";
}
}
$param = array("");
$obj = new TestC();
call_user_func_array(array($obj, "test"), $param);
$obj-show();
$obj-test("WEB应用开发");
$obj-show();
输出:
WEB应用开发
这里是调用一个对象的方法。从test方法中设置对象的_a成员,然后通过show方法将它显示出来,以验证call_user_func_array调用方法时可以正确等到$this指针。这里输出的结果表明已经上面的方法是奏效的。其实回调对象的方法还有一种更加简单的方法,直接$obj-{$method}()就可以调用,只要{$method}是存在的。
PHP回调函数及匿名函数概念与用法详解
PHP的回调函数其实和C,Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数;
回调函数执行完毕之后,再回到主线程处理接下来的流程;
而在PHP调用回调函数,不像C以及Java那样直接使用函数名作为函数参数,而是在PHP中使用函数对应的字符串名称执行。
// call_user_func — 把第一个参数作为回调函数调用
// 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
// PHP中的匿名函数,也叫闭包函数,允许指定一个没有名称的函数。最常用的就是回调函数的参数值。
//检测一个函数变量是否是一个闭包
// 传入参数,引用局部变量
PHP中的回调函数是怎么实现的?
第一种,
常规的php全局函数
function
test($echo)
{
echo
$echo,
"\n";
}
$param
=
array("");
call_user_func_array(test,
$param);
call_user_func_array("test",
$param);
输出:
两种调用方式都可以成功调用,
说明call_user_func_array调用常规php局函数时的第一个参数可以为函数本身,也可以为表示函数名的字符串。
第二种,
类的静态方法
class
TestC
{
static
function
test($echo)
{
echo
$echo,
"\n";
}
}
$param
=
array("");
call_user_func_array(array(TestC,
"test"),
$param);
call_user_func_array(array("TestC",
"test"),
$param);
输出:
这时传第一个参数的时候传了一个数据。数组的第一个元素可以为类本身,也可以为类名的一个字符串。第二个元素则是一个表示方法名的字符串。
第三种,对象的方法
class
TestC
{
protected
$_a
=
"hello
word";
function
test($echo)
{
$this-_a
=
$echo;
}
function
show()
{
echo
$this-_a,
"\n";
}
}
$param
=
array("");
$obj
=
new
TestC();
call_user_func_array(array($obj,
"test"),
$param);
$obj-show();
$obj-test("WEB应用开发");
$obj-show();
输出:
WEB应用开发
这里是调用一个对象的方法。从test方法中设置对象的_a成员,然后通过show方法将它显示出来,以验证call_user_func_array调用方法时可以正确等到$this指针。这里输出的结果表明已经上面的方法是奏效的。其实回调对象的方法还有一种更加简单的方法,直接$obj-{$method}()就可以调用,只要{$method}是存在的。