Bug #68698 [Opn->Fbk]: Fatal error cannot redeclare [class not being redeclared]

From: Date: Fri, 09 Jan 2015 07:26:16 +0000
Subject: Bug #68698 [Opn->Fbk]: Fatal error cannot redeclare [class not being redeclared]
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-189824@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=68698&edit=1 ID: 68698 Updated by: krakjoe@php.net Reported by: pegasus at vaultwiki dot org Summary: Fatal error cannot redeclare [class not being redeclared] -Status: Open +Status: Feedback Type: Bug Package: Scripting Engine problem Operating System: Centos 6 64-bit PHP Version: 5.6Git-2014-12-30 (Git) Block user comment: N Private report: N New Comment: We don't have enough information to investigate the problem, please provide reproducing code. Previous Comments: ------------------------------------------------------------------------ [2014-12-30 17:01:49] pegasus at vaultwiki dot org After looking at the classes being declared by the autoloader where this occurs, it seems that the [class_already_declared] was the last class newly instantiated before attempting to load this [file_that_declares_a_different_class]. It also appears to be the second file that uses require_once to import a specific separate abstract class, with the error-named file containing a class that extends from this abstract class. This appears to be the first time that this situation occurs during the execution, so perhaps require_once is not working properly, and the error message is incorrectly using the name of the last instantiated class during execution, rather than the class being loaded. Even so, there is no redeclaration occurring here. However, I was unable to recreate this scenario using a test script that imported 2 extended classes from the same abstract. The test script completes successfully, so there may be something else contributing to the problem in the background of my main script such as out-of-sync memory or hashes. ------------------------------------------------------------------------ [2014-12-30 16:28:36] pegasus at vaultwiki dot org Description: ------------ In the process of trying to debug this issue on my end: https://bugs.php.net/bug.php?id=68453 I want to note that other bug was never resolved by the PHP team. I provided as much feedback as I could with the minimal suggestions that were made, but the bug was closed as if I never did. The change in bucket order mentioned in the report -still- results in an infinite loop in scripts using PHP master when some objects recursively call instances of themselves (it seems that a method's static variables might not be available on a second pass until the first call of the containing method that should have already created the static has completed). If someone can reopen the issue and look into it again, it would be appreciated. Now, in the process of trying to debug that issue without any help from the PHP team, I discovered that PHP was also throwing a fatal error if the recursion was bypassed: Fatal error: Cannot redeclare class [class_already_declared] in [file_that_doesnt_declare_that_class_at_all] on line 0 As I've noted in the message itself, the class HAS been declared already. However, the error message says that a specific file is trying to redeclare it. The file claimed does not even include the name of the class in so much as a string, and does not include any files that do either. The fact that the error gives "line 0" in the "problematic" file is also not useful information from a development standpoint. This error is reproducible and always states that the same class is trying to re-declare from that same file. It does not matter whether opcache is disabled or enabled. This error does NOT occur in PHP 5.6.4. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=68698&edit=1

« previous php.bugs (#189824) next »