|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-12-11 19:15 UTC] robert at interjinn dot com
Description:
------------
PHP bails out with class declaration nesting error when an error handler dynamically loads an error handling class during a class related E_STRICT warning.
Reproduce code:
---------------
test.php
<?php
set_error_handler( 'errorHandler' );
function errorHandler
( $errorNumber, $errorMessage, $fileName, $lineNumber )
{
require_once( 'errorClass.php' );
$error = new ErrorClass();
$error->handleException(
$errorNumber, $errorMessage, $fileName, $lineNumber );
}
require_once( 'testClass.php' );
$test = new TestClass();
?>
-------------------------------------------------
testClass.php
<?php
class TestClass
{
function __construct()
{
}
function TestClass()
{
$this->__construct();
}
}
?>
-------------------------------------------------
errorClass.php
<?php
class ErrorClass
{
function handleException
( $errorNumber, $errorMessage, $fileName, $lineNumber )
{
echo "Error: [$errorNumber] $errorMessage ($fileName:$lineNumber)\n";
}
}
?>
Expected result:
----------------
I expect to properly be able to handle the following E_STRICT in my custom error class:
<br />
<b>Strict Standards</b>: Redefining already defined constructor for class TestClass in <b>/home/suds/testClass.php</b> on line <b>9</b><br />
Actual result:
--------------
Fatal error: Class declarations may not be nested in /home/suds/errorClass.php on line 4
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 03:00:02 2025 UTC |
I think this report should be given further consideration. I've read the docs (not that I hadn't before), and I will assume you think this is bogus because of the following int he PHP docs: The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called. However, the E_STRICT raised int he error handler script should not be raised in the first place since it is PHP erroneous context that believes the class declaration is being nested, when in fact the class declaration is not being nested. If the include context was properly scoped, then no E_STRICT would be raised and I wouldn't be having a problem. If this is not why this bug was marked bogus, please shed some light for me, since the bogus comment was pretty uninformative (yes I know you're busy and don't have time for 50 million bogus bugs but there's only so much RTFM I can do and hope I can come across exactly what you think makes this a bogus bug). Cheers, Rob.I have upgraded to from version 5.1 to 5.2 on Windows with Apache and I have an that error "Class declarations may not be nested". I had that bug in that case: class A extends C{ static public function foo{ require_once(B.class); } }