如何让set_error_handler()调用对象上的方法?

时间:2009-12-27 19:43:30

标签: php

我认为在PHP中使用set_error_handler()功能可以在一个地方处理大多数PHP错误(将它们记录到文件中)。如果我可以将函数名称传递给set_error_handler(),则从文档中看起来如此。太好了!但我有一个ErrorManager对象,它有一个很好的日志记录方法。我想使用该ErrorManager对象并为其编写一个特殊的错误处理程序方法,并让set_error_handler调用该错误管理器。

我可以做一些像

这样的事情
set_error_handler($this->customErrorHandler);

?或者那会无效吗?

3 个答案:

答案 0 :(得分:52)

传入要调用的对象和方法名称的数组:

set_error_handler(array($this, 'customErrorHandler'));

set_error_handler()需要callback

  

一些函数,如call_user_func()   或usort()接受用户定义   回调函数作为参数。   回调函数不仅可以   简单的功能,也是对象   方法,包括静态类   方法

     

PHP函数通过其名称传递   作为一个字符串。任何内置或   可以使用用户定义的函数,   除了语言结构,例如:   array(),echo(),empty(),eval(),   exit(),isset(),list(),print()或   未设置()。

     

实例化对象的方法是   作为包含一个数组的数组传递   索引0处的对象和方法名称   在索引1。

     

静态类方法也可以   在没有实例化对象的情况下传递   通过课程的那个班级   name而不是索引0处的对象。

     

除了常见的用户定义   function,create_function()也可以   用于创建匿名   回调函数。从PHP 5.3.0开始吧   也可以通过一个闭包来   回调参数。

(强调补充)

答案 1 :(得分:6)

在PHP 5.3中,您可以在闭包中执行此操作:

$that = $this;
set_error_handler( function() use ($that) { $that->customErrorHandler(); } );

答案 2 :(得分:4)

set_error_handler接受callback作为参数。

引用该页面:

  

实例化对象的方法是   作为包含一个数组的数组传递   索引0处的对象和方法名称   在索引1。


在您的情况下,您需要一个与对象(此处为customErrorHandler的方法(称为“$this”)对应的回调。回调将是:

array($this, 'customErrorHandler')

所以,你要使用这部分代码:

set_error_handler(array($this, 'customErrorHandler'));