Edit report at http://bugs.php.net/bug.php?id=51900&edit=1
ID: 51900 Comment by: justin dot rebelo at gmail dot com Reported by: jrdoane at gmail dot com Summary: Abstract Method Not Overridden will Halt PHP. Status: Bogus Type: Bug Package: Class/Object related Operating System: Ubuntu 9.10/RHEL 4 PHP Version: 5.2.13 Block user comment: N Private report: N New Comment: I finally solved it and you are right that the issue was not as it seemed. I wrote my example off the top of my head while I was already away from a workstation and wasn't actually running it. When I tested it, of course, even in the same environment, it worked correctly despite the fact that I was still not getting the errors out of the bad class includes in the exact same environment. So, my error was one I'm ashamed of, but I confess it here for posterity and hopefully it helps someone else who ends up here for the same reason. The classes my application was loading were being loaded from an include file. The application is built using a shared, custom framework which optionally includes some files if the application has need to provide those pieces through includes. As you might guess by now, since the include files are part of the *optional* bootstrapping in the shared framework, they are included as such: @include 'init.inc.php'; // Load app-specific init script if there is one The init.inc.php file was the one loading the application-specific classes. I've honestly very _very_ seldom used the @ operator in my code in abour 5 or 6 years of php work because I know it's generally not a Good Idea, but in this case it seemed perfectly acceptable shorthand, since the existence of an app init script was purely optional and there was no reason to treat its non-existence as a mentionable issue. So, it turns out that the include() call itself is not all that is affected by the prefixed error suppression operation. In fact, the contents of the included file and presumably any code that branches off therein are all affected by the error suppression and, at that point in the application, error_reporting was returning 0 but only there. That was a good waste of a few hours, but a valuable lesson because I'll never bother using the @ operator again! Previous Comments: ------------------------------------------------------------------------ [2011-02-12 01:44:59] justin dot rebelo at gmail dot com Ah, of course I mistyped my example for starters... Are you using E_ALL or -1 or something else? ------------------------------------------------------------------------ [2011-02-12 01:43:04] [email protected] I get Fatal error: Abstract function Foo::test() cannot contain body in /private/tmp/foo.php on line 4 If i remove the body I get Fatal error: Class Bar contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Foo::test) in /private/tmp/foo.php on line 7 ------------------------------------------------------------------------ [2011-02-12 01:22:04] justin dot rebelo at gmail dot com For what it's worth, I have been having this same issue for some time on my ubuntu-based workstation. It took me while to narrow it down to just this situation but I have the following issue. Declare an abstract class: abstract class Foo { abstract public function test () { } } class Bar extends Foo { } When Bar.php gets loaded, PHP dies instantly and silently. Nothing is logged, nothing is printed to browser and when run on CLI, nothing prints to console. phpinfo verifies: error_reporting = E_ALL display_errors = 1 display_startup_errors = 1 I also use xdebug and have stepped through the code to the point where it dies after including the offending file and I get no useful information through it either. I am using PHP Version 5.3.3-1ubuntu9.3 ------------------------------------------------------------------------ [2010-06-09 14:26:40] jrdoane at gmail dot com Display_Errors is on. E_ALL is being displayed. No change, I checked this before submitting a bug report. ------------------------------------------------------------------------ [2010-06-08 13:11:29] [email protected] Not reproducible. Please enable error reporting and make sure display_errors is set to On. PHP 5.3.99-dev PHP 5.3.3-dev PHP 5.2.14-dev All these versions report a fatal error: Fatal error: Class example contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (abcEx::foo) in /tmp/1.php on line 4 ------------------------------------------------------------------------ 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=51900 -- Edit this bug report at http://bugs.php.net/bug.php?id=51900&edit=1
