技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> php的callback类型小记

php的callback类型小记

浏览:1186次  出处信息

很早以前在学习session的时候,其中有个session_set_save_handler()方法可以自定义session读写、销毁、回收动作,也就是通过这个方法实现将session保存进数据库的。当然,大多数时候看到的代码是定义几个函数:function sess_open(){} function sess_close(){}……,然后使用session_set_save_handler()将前面的函数名一一对应起来,这里是用字符串来表示函数名的。这就是phpcallback类型,这是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类型可以是一个字符串表示的函数名,可以是一个数组包括类名和方法名,还可以是一个实例化了的对象和方法名。挺灵活,艾哈!今日的知识虽然显得“很是陈旧”,但让我很是豁然开朗,找到确切的答案真是一件让人痛快的事情!

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1