# RFC: Bare Name Array Dereference

- Status: Declined
- Authors: Andrea Faulds ajf@ajf.me
- Date: 2014-06-01
- Version: 1.0
- Original: https://wiki.php.net/rfc/bare_name_array_dereference
- Page: https://externals.io/rfc/bare_name_array_dereference
- More for agents: search with https://externals.io/search.md?q={query} · RFCs at https://externals.io/rfc.md · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

## Votes

### Merge array dereference into master/PHP 5.7? (closed)

Yes: 0 · No: 15

Voters: aharvey (No), arpad (No), brianlmoon (No), bwoebi (No), colder (No), datibbaw (No), derick (No), fa (No), levim (No), malukenho (No), mbeccati (No), rasmus (No), stas (No), tyrael (No), zeev (No)

## Discussions on the mailing list

- [\[VOTE\] Bare Name Array Literal/Dereference](https://externals.io/message/75005.md) — started on 2014-06-19, 12 messages

---

## Introduction

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

```php
$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:

```php
$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:

```php
$myArray:>foobar:>andSoOn:>moreKeys
```

The :&gt; 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](https://externals.io/rfc/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 :&gt; syntax might not be ideal, and I'm willing to take suggestions for better syntax.

## Unaffected PHP Functionality

$arr:&gt;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.

**Vote: Merge array dereference into master/PHP 5.7?** — Yes: 0 · No: 15 (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

- <http://phpsadness.com/sad/45> - one of my inspirations for this
- The [Bare Name Array Literal](https://externals.io/rfc/bare_name_array_literal) RFC goes hand-in-hand with this one
- [http://marc.info/?t=140164578600002&amp;r=1&amp;w=2](http://marc.info/?t=140164578600002&r=1&w=2) - mailing list discussion on this RFC (it was originally a single RFC containing both this and the literals proposal, but was split into two)

## Rejected Features

None as yet.
