Hi,

is the new dereferencing syntax definitely part of 5.4 ?

Will it be possible to replace this:

$model = new DomainModel('foo', 'bar');
$result = $model->findByName('John');

with:

$result = (new DomainModel('foo', 'bar'))->findByName('John');

?


Thank you
Devis


On 21 November 2011 07:59, Александр Москалёв <ir...@irker.net> wrote:
> Amateurish question to internals:
> Why can not we do more general cases? For example (expr)[3];
> (expr)->foo->bar;
> (expr)()->baz[3]()->makeSomething()[4] = 16; etc.
>
> Now we have (new some)->something; and doSomething()[12], but why only
this
> cases?
>
> Big trouble in parser to do this? Can someone help me to find discussions
> about it, if they exist.
>
> With regards, Alexander Moskaliov
> ir...@irker.net
>
>
> 2011/11/20 Nikita Popov <nikita....@googlemail.com>
>
>> Hi internals!
>>
>> I want to discuss some details of the new dereferencing syntaxes which
>> were introduced in 5.4.
>>
>> 1. I already mentioned lack of support for dereferencing using the
>> alternative array syntax earlier
>> (http://markmail.org/thread/j6rs3bzgzhxmco7n) but there was no
>> conclusion on that topic. Now the (new A)[0] dereferencing syntax
>> landed without alternative syntax too. Does this mean that the general
>> consensus is to deprecate and remove the {} syntax altogether in the
>> future?
>>
>> 2. PHP always supported doing $arr[0]() and 5.4 added the reverse
>> func()[0]. The addition seems slightly inconsistent though, as the
>> combination of both does not work: func()[0]() will result in a syntax
>> error. Same applies to method array dereferencing. Is this
>> intentional?
>>
>> 3. The new expression method, property and array dereferencing
>> syntaxes were added in expr_without_variable. I am not sure whether
>> this was intentional or not. That way (new A)->b will not be a
>> variable (in the parser sense), whereas $a->b will. What is the impact
>> of this? One thing that will not work is doing (new A)->b = 'c'. I
>> know, this looks fairly stupid, but if you consider that A might
>> overload the __set operation it might actually make sense. (It won't
>> make much sense, but hey, (new A)[0] doesn't make much sense to me
>> either). Other areas that might be affected are return by reference,
>> pass by reference and iterate by reference (but I didn't test this).
>>
>> So, I know, those are all edge cases, so leaving them as is won't hurt
>> much. Still I think it's better to discuss them ;)
>>
>> Nikita
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>

Reply via email to