开发者

How can I make set_error_handler() call a method on an object?

开发者 https://www.devze.com 2022-12-14 18:13 出处:网络
I think about using the set_error_handler() functionality in PHP to handle most of the PHP errors in one place (logging them to a file). From the documentation it looks like if I can pass a function n

I think about using the set_error_handler() functionality in PHP to handle most of the PHP errors in one place (logging them to a file). From the documentation it looks like if I can pass a function name to set_error_handler(). Nice! But I have an ErrorManager object which has a nice logging method. I want to use that ErrorManager object and write an special error handler method for it, and have set_error_handler call that ErrorManager.

Could I 开发者_运维技巧just do something like?:

set_error_handler($this->customErrorHandler);

Or would that be invalid?


Pass in an array of the object and the method name to be called:

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

set_error_handler() takes a callback:

Some functions like call_user_func() or usort() accept user-defined callback functions as a parameter. Callback functions can not only be simple functions, but also object methods, including static class methods.

A PHP function is passed by its name as a string. Any built-in or user-defined function can be used, except language constructs such as: array(), echo(), empty(), eval(), exit(), isset(), list(), print() or unset().

A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.

Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object at index 0.

Apart from common user-defined function, create_function() can also be used to create an anonymous callback function. As of PHP 5.3.0 it is possible to also pass a closure to a callback parameter.

(emphasis added)


In PHP 5.3 you could do it in a closure:

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


set_error_handler accepts a callback as parameter.

Quoting that page :

A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.


In your case, you want a callback that corresponds to a method (Called 'customErrorHandler') of an object (here, $this) ; the callback would then be :

array($this, 'customErrorHandler')

So, you'd use this portion of code :

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号