Edit report at http://bugs.php.net/bug.php?id=46851&edit=1
ID: 46851 Updated by: [email protected] Reported by: oliver at teqneers dot de Summary: Strict standards: Declaration of ... should be compatible with that of ... Status: Bogus Type: Bug Package: Scripting Engine problem Operating System: OpenSuSE 11.0 PHP Version: 5.2.8 New Comment: What change? The error is in both cases here, only that in one case, it is not displayed because at the time it is emitted, error_reporting does not contain E_STRICT (.e. php.ini). It's not about ensuring class loading order. It is simply that if you define classes in a "wrong" order, or if you use autoload, classes loading will get postponed at runtime, hence errors will be triggered at runtime i.e. after the error_reporting call. Previous Comments: ------------------------------------------------------------------------ [2010-07-11 14:48:04] david at customcode dot co dot za Surely this counts as a bug when you consider it in the context of applications that make extensive use autoload. I realise I am a bit late to this party but from what I can see the strict standard was changed in php 5.2.10 but I can't seem to find any mention of this change in the changelog. This appears to be a fairly major change potentially affecting alot of people's code. I would expect at least some documentation of the rationale behind the change and at least some guidelines. That being said, surely when it comes to ensuring that classes are loaded/compiled in the correct order, classes that needed to be autoloaded should be loaded first before the child class is compiled. Or am I missing something? ------------------------------------------------------------------------ [2010-06-30 09:48:04] [email protected] It is simply related to the fact that if the classes are in the right order, they get defined at compile time and hence that strict error happens at compile-time, which is before you actually set to display E_STRICT. ------------------------------------------------------------------------ [2010-06-30 03:13:07] mauricio at yoreparo dot com Also tried on PHP 5.3.2, an issue too. thanks ------------------------------------------------------------------------ [2010-06-30 02:18:48] mauricio at yoreparo dot com Still an issue on 5.2.13 when autoloading classes. Oliver code still triggers the STRICT error: <?php // this code does trigger a strict message error_reporting( E_ALL | E_STRICT ); class cc extends c { function test() { return null; } } class c { function test( $a ) { return 1; } } $cc = new cc(); ?> If I autoload the 'c' class the I get the STRICT error. ------------------------------------------------------------------------ [2010-05-28 17:24:46] travis dot crowder at spechal dot com Still an issue in 5.2.10 <?php error_reporting(E_ALL | E_STRICT); abstract class B extends A { public static function foo($str){ echo $str; } } class C extends A { public static function foo(){ echo 'baz'; } } abstract class A { public static function foo(){ echo 'bar'; } } C::foo(); Error: Strict Standards: Declaration of B::foo() should be compatible with that of A::foo() in /var/www/oop_test.php on line 5 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=46851 -- Edit this bug report at http://bugs.php.net/bug.php?id=46851&edit=1
