您的位置:

php扩展动态回调函数的实现(php回调函数怎么写)

本文目录一览:

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}是存在的。