免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2446 | 回复: 3
打印 上一主题 下一主题

set_error_handler()怎么才能set到类的成员函数上 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-26 17:19 |只看该作者 |倒序浏览
今天抽空复习了下php(已经很久没有用了, 工作和PHP没有联系),简单的封装了个error处理的class.
我想在class Error的__constructor()里加上
set_error_handler('Error::handleError');
来定义error处理函数为Error的一个static function (public)。
但是我用红色的这条语句失败了。没有set成功。

最后我很无奈的写成类似下面的这样来处理:

<?php
class Error
{
    public function __construct()
    {
        // set the error reporting level & set the error handler
        error_reporting(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);               
        set_error_handler('handleError');        // handleError -> Error::handleError
    };
    public static function handleError($errno, $errstr, $errfile, $errline)
    {
        ;//deal error
    };
};
function handleError($errno, $errstr, $errfile, $errline)
{
    return Error::handleError($errno, $errstr, $errfile, $errline);
}
?>

虽然是实现了我的想法,但是感觉很不爽,多了个鸡肋的函数。也破化了封装。
有什么办法可以直接得到Error::handleError的句柄?

[ 本帖最后由 seaheart 于 2006-4-26 17:20 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-04-26 18:29 |只看该作者

  1. set_error_handler(array('Error','handleError'));
复制代码

论坛徽章:
0
3 [报告]
发表于 2006-04-27 09:12 |只看该作者
原帖由 Namelessxp 于 2006-4-26 18:29 发表

  1. set_error_handler(array('Error','handleError'));
复制代码

thks.
再问句:这个array('Error','handleError')是什么写法?

论坛徽章:
0
4 [报告]
发表于 2006-04-27 10:15 |只看该作者
原帖由 seaheart 于 2006-4-27 09:12 发表

thks.
再问句:这个array('Error','handleError')是什么写法?



PHP manual:
http://ca3.php.net/manual/zh/function.set-error-handler.php

  1. Given this code:

  2. class CallbackClass {
  3.    function CallbackFunction() {
  4.        // refers to $this
  5.    }

  6.    function StaticFunction() {
  7.        // doesn't refer to $this
  8.    }
  9. }

  10. function NonClassFunction() {
  11. }

  12. there appear to be 3 ways to set a callback function in PHP (using set_error_handler() as an example):

  13. 1: set_error_handler('NonClassFunction');

  14. 2: set_error_handler(array('CallbackClass', 'StaticFunction'));

  15. 3: $o =& new CallbackClass();
  16.    set_error_handler(array($o, 'CallbackFunction'));

  17. The following may also prove useful:

  18. class CallbackClass {
  19.    function CallbackClass() {
  20.        set_error_handler(array(&$this, 'CallbackFunction')); // the & is important
  21.    }
  22.    
  23.    function CallbackFunction() {
  24.        // refers to $this
  25.    }
  26. }

  27. The documentation is not clear in outlining these three examples.
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP