我认为在PHP中使用set_error_handler()功能可以在一个地方处理大多数PHP错误(将它们记录到文件中)。如果我可以将函数名称传递给set_error_handler(),则从文档中看起来如此。太好了!但我有一个ErrorManager对象,它有一个很好的日志记录方法。我想使用该ErrorManager对象并为其编写一个特殊的错误处理程序方法,并让set_error_handler调用该错误管理器。
我可以做一些像
这样的事情set_error_handler($this->customErrorHandler);
?或者那会无效吗?
答案 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'));