On Sun, Jan 6, 2013 at 1:18 AM, Stas Malyshev <smalys...@sugarcrm.com>wrote:

> Hi!
>
> > "Too much magic"? It's completely consistent with how method parameters
> > work now. In fact, I'd argue that introducing a new syntax for this
> > would be inconsistent with the current paradigm.
>
> But this in for methods, and you are putting it into entirely different
> place - property initializer. That's what I call magic - somehow
> property initializer magically becomes method parameter's default value.
>
> > This becomes especially true if initializers are added, where the
> > property would be initialized to a non-null value. Hence adding the
> > ability for it to *never* actually *be* null in the first place...
>
> I think property initializers won't work well, especially combined with
> this syntax. What should public DateTime $foo = 42; produce?
>

Consider the normal function typehints: `function foo(DateTime $foo = 42)`.
Same problem, same solution. You can only assign "compatible" types. For
object typehints NULL is the only compatible compile-time value. For array
typehints arrays can be used as initializers.


> Essentially it looks like the only initializer useful here would be
> NULL. In this case, why not just make it simple and always allow NULL
> there and get rid of the confusing syntax?


Again, same for function typehints. NULL is the only possible initializer
there, too. But still we don't take that as a reason to always allow NULL
for them.

You'd have to allow NULL anyway since otherwise you'd be unable to
> implement unset() and won't
> have any useful isset().


Not every property needs the ability to be unset(). Not being able to unset
it is a feature actually. It guarantees that it will always be available
(after the initial set) and does not have to be checked.

In fact, initial value of any object property
> will always be NULL, so not allowing NULL is pointless as there's always
> NULL there when you start.
>

The timeframe in which it is NULL is usually contained to the constructor.

Reply via email to