Hello Robin, I checked it out in more detail and it is indeed broken as in it is not consistent: [EMAIL PROTECTED] PHP_5_3]$ php -r 'class A { protected static $p=1; } class B extends A { protected static $p=2; } ReflectionClass::Export("B");' -> works == 2 properties -> but should fail because of changed value
[EMAIL PROTECTED] PHP_5_3]$ php -r 'class A { protected static $p=1; } class B extends A { public static $p=2; } ReflectionClass::Export("B");' Fatal error: Cannot change initial value of property static protected A::$p in class B in Command line code on line 1 [EMAIL PROTECTED] PHP_5_3]$ php -r 'class A { public static $p=1; } class B extends A { protected static $p=2; } ReflectionClass::Export("B");' Fatal error: Access level to B::$p must be public (as in class A) in Command line code on line 1 [EMAIL PROTECTED] PHP_5_3]$ php -r 'class A { public static $p=1; } class B extends A { public static $p=2; } ReflectionClass::Export("B");' -> works == 2 properties -> but should fail becasue of changed value So we need to fix this. marcus Monday, January 28, 2008, 4:18:50 PM, you wrote: > Hi Marcus, > Thanks for the prompt reply and explanation. I have some further > questions though: >> If the base class had the property defined as private >> then the property is private to that specific class and not directly >> accessible by derived classes that is it's name gets prefixed with the class >> name.. So in: >> class A { private static $p; } class B extends A { private static $p; } >> we have two different properties: > Understood. But if we have two separate properties for the reason that > A::$p is not visible to B, then how about these cases? > class A { protected static $p; } class B extends A { protected static $p; } > class A { public static $p; } class B extends A { public static $p; } > In both of those cases, A::$p is visible to the derived class, but the > re-declaration results in A::$p and B::$p being two separate > properties (see pastebin.com/fca2cd5b and pastebin.com/f4f94b32d for a > demonstration). This is one of the reasons I find the case where we > end up with only one property value to be surprising. > Another reason is that, as illustrated in my previous post, PHP's > behaviour doesn't seem to correlate with the inheritance rules of > other languages I'm familiar with: you always end up with two distinct > static properties in Java, C++ and C# (though of course I understand > this fact on its own is does not mean PHP is wrong :). > Lastly, with overridden static methods, PHP always yields two distinct > methods, regardless of the visibility modifiers. See > http://pastebin.com/f27f009c4 . Granted, with methods any other > behaviour would be very odd indeed, but it does emphasize an > inconsistency between method and property inheritance rules in PHP. > So for now I continue to feel this is a little strange. Any further > explanations would be greatly appreciated. :) > Thanks, > Robin >> Best regards, >> Marcus Best regards, Marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php