我想在PHP中使用set_error_handler()功能来处理一个地方的大多数PHP错误(将它们记录到文件中).如果我可以将函数名称传递给set_error_handler(),则从文档中看起来如此.太好了!但我有一个ErrorManager对象,它有一个很好的日志记录方法.我想使用该ErrorManager对象并为其编写一个特殊的错误处理程序方法,并让set_error_handler调用该错误管理器.
我能做点什么吗?
set_error_handler($this->customErrorHandler);
Run Code Online (Sandbox Code Playgroud)
?或者那会无效吗?
cle*_*tus 53
传入要调用的对象和方法名称的数组:
set_error_handler(array($this, 'customErrorHandler'));
Run Code Online (Sandbox Code Playgroud)
call_user_func()或usort()等函数接受用户定义的回调函数作为参数.回调函数不仅可以是简单函数,还可以是对象方法,包括静态类方法.
PHP函数的名称作为字符串传递.可以使用任何内置或用户定义的函数,除了语言结构,例如:array(),echo(),empty(),eval(),exit(),isset(),list(),print()或未设置().
实例化对象的方法作为包含索引0处的对象和索引1处的方法名称的数组传递.
通过传递类名而不是索引0处的对象,也可以传递静态类方法而无需实例化该类的对象.
除了常见的用户定义函数外,create_function()还可用于创建匿名回调函数.从PHP 5.3.0开始,也可以将闭包传递给回调参数.
(重点补充)
在PHP 5.3中,您可以在闭包中执行此操作:
$that = $this;
set_error_handler( function() use ($that) { $that->customErrorHandler(); } );
Run Code Online (Sandbox Code Playgroud)