PHP回调函数的实现方法
来源:互联网 发布:sql找出重复数据 编辑:程序博客网 时间:2024/06/03 20:25
全局回调函数:
这里的全局函数的意思,是直接使用function定义的函数,它不包含在任何对象或类之中。请看下面的例子。
示例代码:
function fnCallBack( $msg1 , $msg2 ){ echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2;}$fnName = "fnCallBack";$params = array( 'hello' , 'world' );call_user_func_array( $fnName , $params );
代码说明:
这里使用了PHP内置的函数call_user_func_array来进行调用。call_user_func_array有两个参数,第1个参数是一个字符串,表示要调用的函数名,第2个参数是一个数组,表示参数列表,按照顺序依次会传递给要调用的函数。
效果如下:
类的静态方法的回调:
如果我们要回调的方法,是一个类的静态方法,那怎么办呢?我们依然可以利用PHP内置的call_user_func_array方法来进行调用,请看示例:
class MyClass{ public static function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; }} $className = 'MyClass';$fnName = "fnCallBack";$params = array( 'hello' , 'world' );call_user_func_array( array( $className , $fnName ) , $params );
代码说明:
这段代码和第1种方法的代码很相似,我们将类名(MyClass)也作为call_user_func_array的第1个参数传递进去,就可以实现类的静态方法的回调了。注意,这时call_user_func_array的第1个参数是一个数组了,数组的第1个元素是类名,第二个元素是要调用的函数名
运行结果:
(其实和第1种方法的结果是一样的 ^_^ )
继续研究
如果我用这种方法调用一个类的非静态方法(也就是把static去掉),会出现什么结果呢?请看下面代码
class MyClass{ public function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; }} $className = 'MyClass';$fnName = "fnCallBack";$params = array( 'hello' , 'world' );call_user_func_array( array( $className , $fnName ) , $params );
运行结果还是和上图一样!
对象的方法的回调:
我先用最原始的字符串形式的调用方法尝试了一下,如下所示:
class MyClass{ private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />n"; echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; }} $myobj = new MyClass();$fnName = "fnCallBack";$params = array( 'hello' , 'world' );$myobj->$fnName();
成功了,输出结果
调用是成功了,不过如何把参数params传给这个方法呢,如果把params直接传进去,那么它会作为1个参数,怎么把params拆开来传进去呢?
查了下PHP手册,找到了create_function函数,这个方法可以用字符串来创建一个匿名函数,好,有思路了,可以创建一个匿名的函数,在这个匿名函数中,调用我们的回调函数,并把参数传进去。
class MyClass{ private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />n"; echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; }} $myobj = new MyClass();$fnName = "fnCallBack";$params = array( 'hello' , 'world' );$strParams = ''; $strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName(';for ( $i = 0 ; $i < count( $params ) ; $i ++ ){ $strParams .= ( '$params['.$i.']' ); if ( $i != count( $params )-1 ) { $strParams .= ','; }}$strCode = $strCode.$strParams.");";$anonymous = create_function( '' , $strCode);$anonymous();
转载请注明:水平凡's Blog » PHP回调函数的实现方法
- PHP回调函数的实现方法
- PHP回调函数的实现方法
- PHP回调函数的实现方法
- PHP回调函数的实现方法
- PHP回调函数的实现方法 处理事件
- PHP的array_map函数使用类内部方法作为回调函数的实现方式
- php的回调函数
- PHP的回调函数
- java,php,javaScript中的回调函数的实现
- java,php,javaScript中的回调函数的实现
- 《PHP---使用回调函数实现数组的筛选》
- python 回调函数和回调方法的实现
- python 回调函数和回调方法的实现
- c#调用c++带有回调函数方法的实现
- c# 调用c++带有回调函数方法的实现
- 什么是回调函数?回调函数的简单实现。
- IOS 回调函数实现方法
- php 回调函数
- 敏捷开发系列终极之旅 第六站(像橄榄球运动一样富有激情的SCRUM)
- 聚合函数
- java之父
- POJ 1125 Stockbroker Grapevine (Floyd)
- lkm 的应用 Linux VS Android
- PHP回调函数的实现方法
- 黑马程序员—Java基础学习笔记之7K月薪面试题破解_交通灯管理系统
- c++ primer阅读笔记-15章-1
- C++编程->内存函数
- 约束
- C#基础知识——static关键字解析
- 动手学Android之二——初识Activity
- 图灵
- 黑马程序员-函数基础知识