ID: 49105 Updated by: j...@php.net Reported By: atrauzzi at gmail dot com -Status: Open +Status: Bogus Bug Type: Class/Object related Operating System: Linux PHP Version: 5.3.0 New Comment:
Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Previous Comments: ------------------------------------------------------------------------ [2009-07-30 04:26:24] mail at dropdev dot org You're confusing two similar, yet different concepts, Inheritance and Extension. Also, PHP is doing it perfect, since you actually inherit a static variable (that all point to the same memory point.) think of this example: <?php abstract class MasterAlarm { protected static $state = ""; public static function alert() { static::$state = "ALERT"; } public static function safe() { static::$state = "safe"; } public static function showMasterAlarmState() { return(static::$state); } } ?> and then extend it: <?php class Bell extends MasterAlarm { } class Button extends MasterAlarm { } ?> and the executing code <?php Light::safe(); Light::showMasterAlarmState(); // "safe" Button::alert(); Button::showMasterAlarmState(); // "ALERT" Light::showMasterAlarmState(); // "ALERT" Button::safe(); Light::showMasterAlarmState(); // "safe" ?> ------------------------------------------------------------------------ [2009-07-30 00:42:01] atrauzzi at gmail dot com Description: ------------ Subclass properties should be duplicated from the parent class, not passed through to the parent class. The current behaviour is redundant and possibly misleading. Especially with the great selection of scopes in PHP (parent::, static::, self::). The current workaround is to dump everything into an array on the parent, keyed by subclass. This knocks out cohesive design and restricts the potential for some fairly neat designs. At the very least - to prevent accidental misuse - a subclass should be throwing an error when trying to access a property that doesn't exist, but does exist on a parent. Really what should be happening though, is a child should be getting its own copy of each property defined in the parent. Reproduce code: --------------- abstract class Parent { protected static $message = "UNTOUCHED"; public static function yeah() { static::$message = "YEAH"; } public static function nope() { static::$message = "NOPE"; } public static function lateStaticDebug() { return(static::$message); } } class Child extends Parent { } Expected result: ---------------- Parent::yeah(); Parent::lateStaticDebug(); // Return "YEAH" Child::nope(); Child::lateStaticDebug(); // Return "NOPE" Parent::yeah(); Child::lateStaticDebug() // Return "NOPE" Actual result: -------------- Parent::yeah(); Parent::lateStaticDebug(); // Returns "YEAH" Child::nope(); Child::lateStaticDebug(); // Returns "NOPE" Parent::yeah(); Child::lateStaticDebug() // Returns "YEAH" ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49105&edit=1