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

Php 如何使set_error_handler()调用对象上的方法?,php,Php,我考虑使用PHP中的set\u error\u handler()功能在一个位置处理大多数PHP错误(将它们记录到文件中)。从文档中可以看出,我是否可以将函数名传递给set\u error\u handler()。美好的但是我有一个ErrorManager对象,它有一个很好的日志记录方法。我想使用ErrorManager对象并为其编写一个特殊的错误处理程序方法,并让set\u error\u handler调用ErrorManager 我能做点什么吗 set_error_handler($thi

我考虑使用PHP中的
set\u error\u handler()
功能在一个位置处理大多数PHP错误(将它们记录到文件中)。从文档中可以看出,我是否可以将函数名传递给
set\u error\u handler()
。美好的但是我有一个
ErrorManager
对象,它有一个很好的日志记录方法。我想使用
ErrorManager
对象并为其编写一个特殊的错误处理程序方法,并让
set\u error\u handler
调用
ErrorManager

我能做点什么吗

set_error_handler($this->customErrorHandler);

还是无效?

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

set_error_handler(array($this, 'customErrorHandler'));
采取以下行动:

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

PHP函数通过其名称传递 一串。任何内置或 可以使用用户定义的函数, 除以下语言结构外: 数组(),echo(),empty(),eval(), 退出()、isset()、列表()、打印()或 取消设置()

实例化对象的方法是 作为包含 索引0处的对象和方法名称 在索引1处。

静态类方法也可以是 未实例化对象而传递 通过这个班就可以得到那个班的学生 名称,而不是索引0处的对象

除了常见的用户自定义 函数,创建函数()也可以 用于创建匿名 回调函数。从PHP5.3.0开始 也可以将闭包传递给 回调参数

(添加了强调)

接受一个参数

引用该页:

实例化对象的方法是 作为包含 索引0处的对象和方法名称 在指数1


在您的例子中,您需要一个回调,该回调对应于对象的方法(称为“
customErrorHandler
”)(此处为“
$this
”);然后,回调将是:

array($this, 'customErrorHandler')
因此,您将使用这部分代码:

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

在PHP 5.3中,您可以在闭包中完成:

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

从set_error_handler()()()()的手动输入中:“…包含对象引用和方法名称的数组也可以作为错误处理程序提供。”
$此
在5.3中的闭包中不可用,不是吗?确实,您必须为其创建一个额外的变量。我相应地更新了代码…