|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #25580 set_error_handler to a class/method resets class properties when error occurs
Submitted: 2003-09-17 15:28 UTC Modified: 2003-09-20 18:14 UTC
From: paul dot liversidge at recycledpixels dot com Assigned:
Status: Wont fix Package: Class/Object related
PHP Version: 4.3.2 OS: Windows XP
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2003-09-17 15:28 UTC] paul dot liversidge at recycledpixels dot com
I set the error handler to point at a class/method and then change some of the class variables. Debugging lines and method confirm the class variable has occurred. When I then trigger an error by echo'ing an uninitialized variable the error handler resets or reinstantiates the class.

If $use_me is initialized in the constructor instead of being defined as a 'constant', it makes no difference as the value at the time of an error is NULL, whatever is defined in the core class code.

If the set_error_handler function is called from line 3, i.e. set_error_handler (array (&$err, 'handler_error')), it all works fine.

Reproduce code:
$err = new ErrorHandler;

$err->use_me = true;
echo ("[1:{$err->use_me}]");
$err->test ();

echo $fred;

class ErrorHandler {
  var $use_me = 4;
  function ErrorHandler () { 
    set_error_handler (array (&$this, 'handle_error'));

  function test () {
    echo ("[2:{$this->use_me}]");

  function handle_error ($number, $message, $file, $line, $context) {
    echo ("[3:{$this->use_me}]");
    echo ("Error $number");

Expected result:
[1:1][2:1][3:1]Error 8

Actual result:
[1:1][2:1][3:4]Error 8


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2003-09-17 16:05 UTC] paul dot liversidge at recycledpixels dot com
If I add a new method to the class, activate (see below), remove the constructor method and call this new function immediately after instantiating the class, i.e. $err->activate (); it all works fine as well.

  function activate () {
    $this->old_error_handler = set_error_handler (array (&$this, 'handle_error'));

It seems to be something related to setting the error handler in the constructor method.
 [2003-09-20 18:12 UTC]
Fixed in PHP 5, won't fix in PHP 4. 

See also:

 [2003-09-20 18:14 UTC]
And this would make it work as you expect too:

$err =& new ErrorHandler;

PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Thu Feb 09 04:03:43 2023 UTC