IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

php的callback类型小记

Zend Studio 2010-06-28 23:58:23 累计浏览 1,701 次
本机暂存

很早以前在学习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类型可以是一个字符串表示的函数名,可以是一个数组包括类名和方法名,还可以是一个实例化了的对象和方法名。挺灵活,艾哈!今日的知识虽然显得“很是陈旧”,但让我很是豁然开朗,找到确切的答案真是一件让人痛快的事情!

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,269)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  4. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  5. 我的PHP,Python和Ruby之路 (累计阅读 13,147)
  6. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,789)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. Redis消息队列的若干实现方式 (累计阅读 12,088)
  9. 到底什么是MVC? (累计阅读 11,865)
  10. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)