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

php
2022-08-30 12:14:58

我考虑使用PHP中的功能在一个地方处理大多数PHP错误(将它们记录到一个文件中)。从文档中可以看出,如果我可以将函数名称传递给 .好!但是我有一个对象,它有一个很好的日志记录方法。我想使用该对象并为它编写一个特殊的错误处理程序方法,并调用该。set_error_handler()set_error_handler()ErrorManagerErrorManagerset_error_handlerErrorManager

我可以做这样的事情吗?

set_error_handler($this->customErrorHandler);

还是无效?


答案 1

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

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

set_error_handler() 进行回调

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

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

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

还可以通过传递类名而不是索引 0 处的对象来传递静态类方法,而无需实例化该类的对象。

除了常见的用户定义函数外,create_function() 还可用于创建匿名回调函数。从 PHP 5.3.0 开始,还可以将闭包传递给回调参数。

(着重号后加)


答案 2

在 PHP 5.3 中,你可以通过闭包来做到这一点:

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

推荐