前言
前面两篇文章《【web 开发基础】PHP 回调函数之变量函数 》和《【web 开发基础】PHP 自定义回调函数之 call_user_func_array() 》中介绍的都是通过全局函数的方式声明和应用的回调函数,即是没有在任何对象或类中定义的函数中使用回调函数,但是,如果遇到回调类中的静态方法,或者是对象中的普通方法,则会有所不同。回调的方法,如果是一个类的静态方法或对象中的一个成员方法,那又应该怎么办呢?在我们文章《【web 开发基础】PHP 自定义回调函数之 call_user_func_array() 》中我们介绍了php的回调函数的call_user_func_array() 函数。我们了解到在call_user_func_array() 函数的应用中。可以将第一个参数函数名称 “字符串”改成“ 数组类型的参数”。下面我们通过一个实例来介绍类静态函数和对象的方法回调相关的做法。
编程实践
分别声明一个类,一个类中声明一个静态方法,另一个类中声明一个普通方法,通过调用不同的方法对比两种方法的回调有和区别。下面同样使用系统函数call_user_func_array()调用类中的静态成员方法和实例对象成员方法。
<?php
//声明一个类demo,类中声明一个静态成员方法fun()
class DemoClass{
static function fun($m1,$m2){
echo "m1 = ".$m1;
echo "\n";
echo "m2 = ".$m2;
}
}
//声明一个类test,类中声明一个静态成员方法fun()
class TestClass{
function fun($m1,$m2){
echo "m1 = ".$m1;
echo "\n";
echo "m2 = ".$m2;
}
}
//通过使用系统函数call_user_func_array(),调用demo类中的静态成员方法fun()
call_user_func_array( array("DemoClass","fun"), array("hello", "world"));
echo "\n------------完美的分割线------------\n";
//通过使用系统函数call_user_func_array(),调用test类中的实例对象成员方法fun()
call_user_func_array( array(new TestClass(),"fun"), array("你好","欢迎你"))
?>
执行结果如下图所示:
所有使用 call_user_func_array() 函数来实现的自定义回调函数,或者php系统中为我们提供的所有回调函数,都可以像此函数一样,在第一个参数中使用数组类型值,而且数组中必须使用两个元素:从上面的代码可以看出如果调用类中的成员方法,就需要在这个数组参数中指定第一个元素为类名称字符串;第二个元素则是这个类中的静态方法名称的字符串;如果调用对象中的成员方法名称,则这个数组中的第一个元素是对象的引用,第二个元素则是该对象中的成员方法名称的字符串。 call_user_func_array() 函数的第二个参数使用是没有变化的。
总结
回调函数的语法格式如下,其中 callback() 代表所有回调函数:
1、回调全局函数
callback("函数名称字符串")
2、回调类中的静态成员方法
callback(array("类名称字符串","类中静态方法名称字符串"))
3、回调对象中的成员方法
callback(array(对象引用,"对象中方法名称字符串"))
系统为我们提供的回调函数和我们自定义的回调函数在调用方法上都是完全相同的。在PHP中提供的带有回调函数的系统函数有很多,用法上差别应该不大,如果在后续的文章中涉及到我们再详细介绍。
【转自:建湖网页开发 http://www.1234xp.com/jianhu.html 复制请保留原URL】