rfc:bare_name_array_dereference

PHP RFC: Bare Name Array Dereference

Introduction

The current array dereferencing syntax for string keys is somewhat cumbersome:

$myArray['foobar']['andSoOn']['moreKeys']

To dereference an array with a string key requires four characters. By contrast, dereferencing objects is much shorter, as the key name does not need to be quoted most of the time:

$myObject->foobar->andSoOn->moreKeys

That requires just two characters. So, this RFC proposes a similar syntax for dereferencing string keys fitting the IS_STRING profile:

$myArray:>foobar:>andSoOn:>moreKeys

The :> syntax is just my initial proposal. If there is a better (less ugly?) alternative token, please suggest it.

This complements the Bare Name Array Literal RFC, as both this proposal and that one deal with using bare T_STRING names for array keys.

Proposal

Along with the existing syntax for dereferencing a key in an array, the following new syntax is added:

  array :> T_STRING

This functions the same as dereferencing a quoted key in square brackets.

Backward Incompatible Changes

None. This has no effect on existing code.

Proposed PHP Version(s)

Proposed for the next PHP 5.x, which at the time of writing, is PHP 5.7.

RFC Impact

SAPIs, extensions, opcache, constants and php.ini are unaffected. No new opcodes are added, this is purely a parsing change.

Open Issues

The :> syntax might not be ideal, and I'm willing to take suggestions for better syntax.

Unaffected PHP Functionality

$arr:>foobar are the same $arr['foobar'], so it is completely optional and shouldn't break anything.

Future Scope

None I can see.

Vote

A 2/3 majority as it is a language change. Voting began on 2014-06-21 (after a hiccup it was restarted) and ended 2014-06-28.

Merge array dereference into master/PHP 5.7?
Real name Yes No
aharvey (aharvey)  
arpad (arpad)  
brianlmoon (brianlmoon)  
bwoebi (bwoebi)  
colder (colder)  
datibbaw (datibbaw)  
derick (derick)  
fa (fa)  
levim (levim)  
malukenho (malukenho)  
mbeccati (mbeccati)  
rasmus (rasmus)  
stas (stas)  
tyrael (tyrael)  
zeev (zeev)  
Final result: 0 15
This poll has been closed.

Patches and Tests

There is a working and tested patch implementing this here: https://github.com/TazeTSchnitzel/php-src/compare/bareNameArrayDereference

The branch on my GitHub account is here: https://github.com/TazeTSchnitzel/php-src/tree/bareNameArrayDereference

Implementation

If/when the RFC is implemented, this section should contain

  1. the version(s) it was merged to
  2. a link to the git commit(s)
  3. a link to the PHP manual entry for the feature

References

Rejected Features

None as yet.

rfc/bare_name_array_dereference.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1