Edit report at http://bugs.php.net/bug.php?id=51463&edit=1
ID: 51463
User updated by: tyra3l at gmail dot com
Reported by: tyra3l at gmail dot com
Summary: ErrorException thrown from error_handler not catchable
in exception handler
Status: Closed
Type: Bug
Package: Scripting Engine problem
Operating System: Windows Xp Sp3, Debian Lenny
PHP Version: 5.3.2
New Comment:
But the exception handler should be called after the error handler and
before accessing the empty property which gives the fatal error, isn't
it?
I mean at first the interpreter tries to access the variable named $foo,
then generates a E_NOTICE which is trapped by the error handler, which
trows an Exception which never catched at all.
Previous Comments:
------------------------------------------------------------------------
[2010-04-02 13:35:54] tyra3l at gmail dot com
shit, my mistake, $foo will be empty, so $this->$foo will be generating
a fatal error, but before that, generate a warning about $foo is empty.
:/
------------------------------------------------------------------------
[2010-04-02 13:33:40] tyra3l at gmail dot com
On Lenny I was testing with the dotdeb.org 5.3.2 deb, on windows this is
the TS VC9 build
------------------------------------------------------------------------
[2010-04-02 13:29:49] tyra3l at gmail dot com
Description:
------------
It seems that there are some cases, when you can't catch Exceptions with
exception_handler which was thrown from error_handler for some errors.
For example if you do this:
$class = new StdClass;
echo $class->$foo;
error_handler gets called, ErrorException was thrown, but the Exception
wasn't catched with the exception_handler.
if you try
echo $foo;
instead of
echo $class->$foo;
then the "same" error gets called with the error handler (by same error,
I mean same parameters), but the Exception thrown in this case is
successfuly catched by the exception handler.
Test script:
---------------
<?php
error_reporting(E_ALL);
ini_set('display_errors', 0);
function debug($s){
echo "<pre>";
var_dump($s);
echo "</pre>";
}
set_error_handler(
function ($errno, $errstr, $errfile, $errline ) {
debug('error_handler');
debug(array(
'errno' => $errno,
'errstr' => $errstr,
'errfile' => $errfile,
'errline' => $errline,
));
throw new ErrorException($errstr, 0, $errno, $errfile,
$errline);
}
);
set_exception_handler(
function(Exception $e){
debug('exception_handler');
debug($e);
}
);
$class = new StdClass;
echo $class->$foo;
echo 'done';
Expected result:
----------------
string(13) "error_handler"
array(4) {
["errno"]=>
int(8)
["errstr"]=>
string(23) "Undefined variable: foo"
["errfile"]=>
string(55) "C:\work\xampp_vc9\htdocs\default\bug\error_handling.php"
["errline"]=>
int(46)
}
string(17) "exception_handler"
object(ErrorException)#4 (8) {
["message":protected]=>
string(23) "Undefined variable: foo"
...
Actual result:
--------------
string(13) "error_handler"
array(4) {
["errno"]=>
int(8)
["errstr"]=>
string(23) "Undefined variable: foo"
["errfile"]=>
string(55) "C:\work\xampp_vc9\htdocs\default\bug\error_handling.php"
["errline"]=>
int(46)
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51463&edit=1