php.net |  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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: paul dot liversidge at recycledpixels dot com
New email:
PHP Version: OS:

 

 [2003-09-17 15:28 UTC] paul dot liversidge at recycledpixels dot com
Description:
------------
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

Patches

Pull Requests

History

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] sniper@php.net
Fixed in PHP 5, won't fix in PHP 4. 

See also: http://fi.php.net/manual/en/language.oop.newref.php

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

$err =& new ErrorHandler;

 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Jan 05 05:01:28 2025 UTC