Am 13.04.2015 um 17:29 schrieb Benjamin Eberlei: > What would happen if you "call the parent constructor": > > class A extends B { > static public function __static() { > B::__static(); > } > } >
Please have a closer look to the definition of the function: https://wiki.php.net/rfc/static_class_constructor#proposal it should be declared "private" to prohibit any access from outside the of the class itself. Although see the the answer 2 in discussion section: https://wiki.php.net/rfc/static_class_constructor#inheritance_of_the_class_constructor Thanks for feedback > On Mon, Apr 13, 2015 at 5:23 PM, Johannes Schlüter <johan...@schlueters.de> > wrote: > >> Hi, >> >> On Mon, 2015-04-13 at 15:37 +0200, Johannes Ott wrote: >>> finally I managed to do my first RFC draft. >>> >>> https://wiki.php.net/rfc/static_class_constructor >>> >>> I hope I have done everything correct so far and I'm looking forward to >>> your feedback on it. >> >> In my opinion this makes the language way more complex as there are more >> places which "suddenly" execute code but solves a small problem compared >> to that. (Which actually is an issue many people would suggest to avoid >> completely instead of ennobling this with a language feature. >> >> Why am I saying it makes the language more complex? - Your proposal >> seems to miss mentioning when exactly the method is executed. what is >> the output of >> >> >> a.php: >> <?php >> echo 'A: '.__FILE__.':'.__LINE__."\n"; >> class A { >> static function __static() { >> echo __CLASS__.'::'.__METHOD__."\n"; >> } >> } >> echo 'B: '.__FILE__.':'.__LINE__."\n"; >> class B { >> static function __static() { >> echo __CLASS__.'::'.__METHOD__."\n"; >> } >> } >> echo 'C: '.__FILE__.':'.__LINE__."\n"; >> ?> >> >> b.php: >> <?php >> echo 'D: '.__FILE__.':'.__LINE__."\n"; >> >> C::$foo = 23; >> echo 'E: '.__FILE__.':'.__LINE__."\n"; >> >> include 'a.php'; >> echo 'F: '.__FILE__.':'.__LINE__."\n"; >> >> >> class C { >> static $foo = 0; >> static function __static() { >> echo __CLASS__.'::'.__METHOD__."\n"; >> } >> } >> >> echo 'G: '.__FILE__.':'.__LINE__."\n"; >> >> class D extends B { >> static function __static() { >> echo __CLASS__.'::'.__METHOD__."\n"; >> } >> } >> >> echo 'H: '.__FILE__.':'.__LINE__."\n"; >> ?> >> >> >> Mind that in b.php we make use of class C above the declaration, which >> we can do as C is a simple class and can be bound early during >> compilation. Class D however can only be bound during run-time, after >> including a.php, which happens after C was already used. >> >> johannes >> >> > -- DerOetzi -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php