Re: Suggestion: echo function(var)[0];
| From: | Harrison Yuan | Date: | Sat, 05 Jun 2010 10:47:32 +0000 |
| Subject: | Re: Suggestion: echo function(var)[0]; | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-48660@lists.php.net to get a copy of this message | ||
I don't understand what is holding PHP back from having this syntax.
Tig said:
<?
$tmp = getimagesize('./path/to/image');
echo $tmp[1];
?>
The need to assign the trivial variable $tmp first is completely arbitrary.
Is it not a design goal somewhere that languages should allow the greatest
degree of literal expression possible, consistent with existing syntax &
semantics rules?
I am new here but would be interested in helping with a patch (+ hopefully
another RFC) for this. What exactly are the specific arguments against array
dereferencing?
- Harrison
On Fri, Jun 4, 2010 at 4:19 PM, mathieu.suen <mathieu.suen@easyflirt.com>wrote:
> On 06/04/2010 10:00 AM, Richard Quadling wrote:
>
>> On 4 June 2010 08:18, mathieu.suen<mathieu.suen@easyflirt.com> wrote:
>>
>>
>>> Hi
>>>
>>> Why not something more generic.
>>> Someone could think of a ValueNode.
>>>
>>> Then it could be use for object, array, any primitive type ...
>>>
>>> I will take the ValueNode as a non terminal grammar node.
>>> So first we could do that:
>>>
>>> ValueNode->method();
>>> ValueNode::sMethod();
>>> ValueNode[];
>>> foo(ValueNode);
>>> echo ValueNode;
>>> $e = ValueNode;
>>> ...
>>>
>>> And a ValueNode could be define as:
>>>
>>> ValueNode :
>>>
>>> NewStatement
>>> | FunctionCall
>>> | PrimitiveValue
>>> | '(' ValueNode ')'
>>> | ...;
>>>
>>> This would allow all this syntax:
>>>
>>> (new A())->foo();
>>> foo(new A());
>>> foo->bar()[1];
>>> foo()[5];
>>>
>>> and many others.
>>>
>>>
>>> On 06/04/2010 03:19 AM, Kalle Sommer Nielsen wrote:
>>>
>>>
>>>> Hi Tig
>>>>
>>>> 2010/6/4 Tig<tigger.on@gmail.com>:
>>>>
>>>>
>>>>
>>>>> Would be at all possible to implement this kind of shortcut?
>>>>>
>>>>>
>>>>>
>>>> Its called array-dereferencing and it was proposed countless times,
>>>> including by myself. There is an RFC for this[1] and it was planned on
>>>> the old PHP6 todo at the PDT[2].
>>>>
>>>> [1]
>>>> http://wiki.php.net/rfc/functionarraydereferencing
>>>> [2] http://wiki.php.net/summits/pdmnotesmay09#php_6
>>>> (see point #13)
>>>>
>>>>
>>>>
>>>>
>>>
>>> --Mathieu Suen
>>>
>>>
>>>
>>>
>>>
>>>
>> Not an expert in this area, but does this mechanism limit you to using
>> single dimensional arrays?
>>
>>
>>
>
> Of course not as soon as you add array access to a ValueNode
>
> ValueNode
>
> ..
> | ArrayAccess
> ...;
>
> This is very simple and it can refactor greatly the parser.
>
> -- Mathieu Suen
>
>
>
>