ID:               50003
 User updated by:  melfar at gmail dot com
 Reported By:      melfar at gmail dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         Feature/Change Request
 Operating System: agnostic
 PHP Version:      5.3.0
 New Comment:

How about this?

<?php
  function car_brands() {
    return array("gm"     => array("chevy" => 1, "hummer"  => 2), 
                 "toyota" => array("prius" => 1, "corolla" => 2));
  }
  var_dump(car_brands()["toyota"]["corolla"]);
?>

New patch is as follows:

--- a/Zend/zend_language_parser.y.orig  2009-10-26 18:13:56.000000000 
+0300
+++ b/Zend/zend_language_parser.y       2009-10-27 01:02:08.000000000 
+0300
@@ -47,7 +47,7 @@
 %}
 
 %pure_parser
-%expect 2
+%expect 6
 
 %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
 %left ','
@@ -874,6 +874,11 @@ variable_class_name:
 ;
 
 base_variable_with_function_calls:
+    raw_base_variable_with_function_calls              { $$ = $1; }
+  | base_variable_with_function_calls  '[' dim_offset ']'      { 
fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
+;
+
+raw_base_variable_with_function_calls:
                base_variable           { $$ = $1; }
        |       function_call { 
zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.u.EA.type = 
ZEND_PARSED_FUNCTION_CALL; }
 ;


Previous Comments:
------------------------------------------------------------------------

[2009-10-26 20:58:42] johan...@php.net

The idea was often discussed, but nobody found a fully satisfying
solution, yet.

Yours is limited to one array dimension.

<?php
function foo() {
    return array(array(42));
}

echo foo()[0][0];
?>

Will for instance not work but should be supported.

I also think it's likely to cause memory problems in edge cases while I
wasn't able to create one in my quick tests.

Anyidea aobut the above problem?

------------------------------------------------------------------------

[2009-10-26 18:47:23] melfar at gmail dot com

Not sure how to attach a file.  The proposed patch is as follows.



--- a/Zend/zend_language_parser.y.orig  2009-10-26 18:13:56.000000000 
+0300
+++ b/Zend/zend_language_parser.y       2009-10-26 21:20:19.000000000 
+0300
@@ -47,7 +47,7 @@
 %}
 
 %pure_parser
-%expect 2
+%expect 6
 
 %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
 %left ','
@@ -874,6 +874,11 @@ variable_class_name:
 ;
 
 base_variable_with_function_calls:
+    raw_base_variable_with_function_calls              { $$ = $1; }
+  | raw_base_variable_with_function_calls      '[' dim_offset ']'      
{ fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
+;
+
+raw_base_variable_with_function_calls:
                base_variable           { $$ = $1; }
        |       function_call { 
zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.u.EA.type = 
ZEND_PARSED_FUNCTION_CALL; }
 ;

------------------------------------------------------------------------

[2009-10-26 18:45:24] melfar at gmail dot com

Description:
------------
PHP parser doesn't allow for array index operation to be used on a 
result of a function call.  I propose a patch to allow such a 
construction.

Reproduce code:
---------------
<?php
  function car_brands() {
    return array("chevy", "hummer");
  }
  print car_brands()[1] . "\n";
?>


Expected result:
----------------
"hummer"



Actual result:
--------------
Parse error: syntax error, unexpected '[' in test.php on line 5


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=50003&edit=1

Reply via email to