Hi Johannes,

On 13 April 2015 at 13:37, Johannes Ott <m...@deroetzi.de> wrote:
> Hi,
>
> 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.



Here is some feedback then:

>From the RFC:
> - Trigger for “magic” method call: First call to class, either first call to 
> __construct(...) or first call to any public or protected static method or 
> property of the class

I don't think this doesn't cover all cases that it needs to. For
example calling unserialze on some data that results in a class that
has this static initializer should mean that it would be invoked?
Similarly ReflectionClass::newInstanceWithoutConstructor also creates
a class in a way that isn't covered in the RFC, but presumably should
be.

>From the RFC.
> the static class constructor should be able to throw a catchable Exception
> for user error handling, if it is not possible to initialize. The open issue 
> for
> me is, what the behavior on recalling the static class constructor afterward 
> is.
> There are two possible behaviors I do not know which one I really would 
> prefer so far.

You missed the third and in my opinion correct one; the static
initializer would only ever be called once. If the programmer catches
the exception and forces the program to continue, that is their own
problem. Adding complexity to a language to try to work around
programmers ignoring exceptions is not a good idea.

I think the RFC needs to be clearer in the specification of the order
that static initialization is called in. e.g. class B extends class A.
Both A and B have static initialization blocks. When a user calls `new
B()` which static initialization block is called first?

cheers
Dan

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to