您当前位于: 首页 » 我爱PHP » php的callback类型小记

php的callback类型小记06/28/2010

很早以前在学习session的时候,其中有个session_set_save_handler()方法可以自定义session读写、销毁、回收动作,也就是通过这个方法实现将session保存进数据库的。当然,大多数时候看到的代码是定义几个函数:function sess_open(){} function sess_close(){}……,然后使用session_set_save_handler()将前面的函数名一一对应起来,这里是用字符串来表示函数名的。这就是php的callback类型,这是php4时代的写法,在php5和php面向对象编程迅速流行起来以后,在callback这里起了一点点的变化,我们看到了使用数组,即形如:session_set_save_handler( array( ‘session_cls’, ‘open’ ), array( ‘session_cls’, ‘close’ ), array( ‘session_cls’, ‘read’ ), array( ‘session_cls’, ‘write’ ), array( ‘session_cls’, ‘destroy’ ), array( ‘session_cls’, ‘gc’ ) ),明显多出一个类名,并且随着我阅读的优秀的开源项目的代码越来越多,这种callback的调用形式越发频繁,到后来就干脆全是这样子的了。

我并没有去深究这个东西,只是觉得略微不适应,看的多了也就懂了,还有很多的插件机制里的call_user_func()call_user_func_array() ,写的时候有些依样画葫芦的意思,因为结果是正确的,企图翻阅php手册无果,便上google 百度了一把,功夫不负有心人,不负有心人!找到了颇为有力的确切说明,示例代码如下:

<?php
// An example callback function
function my_callback_function() {
    echo 'hello world!';
}
 
// An example callback method
class MyClass {
    function myCallbackMethod() {
        echo 'Hello World!';
    }
}
 
// Type 1: Simple callback
call_user_func('my_callback_function');
 
// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod'));
 
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
?>

居然还是来自php手册,搜索我还是习惯谷歌啊。是的,从上面的代码可以看出,callback类型可以是一个字符串表示的函数名,可以是一个数组包括类名和方法名,还可以是一个实例化了的对象和方法名。挺灵活,艾哈!今日的知识虽然显得“很是陈旧”,但还是让我豁然开朗,找到确切的答案真是一件让人痛快的事情!

| 6条评论 标签:  

6条评论
  1. mtmt说道:

    这还真是“很是陈旧”

    现在已经可以这样:

    <?php
    call_user_func(function () {
    echo 'hello world!';
    });

  2. SP说道:

    到处都是匿名函数。。

  3. conall说道:

    貌似不支持静态访问。。。。?

  4. frePerl说道:

    “上google 百度了一把”这话是啥意思

发表评论