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

Reply via email to