Skip to content

NewClassMemberAccess: recognize member access using curly braces#852

Merged
wimg merged 1 commit intomasterfrom
feature/newclassmemberaccess-recognize-curlies
Aug 28, 2019
Merged

NewClassMemberAccess: recognize member access using curly braces#852
wimg merged 1 commit intomasterfrom
feature/newclassmemberaccess-recognize-curlies

Conversation

@jrfnl
Copy link
Copy Markdown
Member

@jrfnl jrfnl commented Jul 29, 2019

What with PHP 7.4 deprecating the array dereferencing syntax with curly braces, I've been doing some research on where this was supported up to now.

Turns out that, as of PHP 7.0, dereferencing class member access on instantiation using curly braces has been supported.
See: https://3v4l.org/KsEgH

While the PHP 7.0 changelog makes no note of this, the change was probably part of the PHP 7.0 Uniform Variable Syntax changes.

This PR adjusts the PHPCompatibility.Syntax.NewClassMemberAcces sniff to:

  • Also recognize curly braces.;
  • Throw an error for each access detected, i.e. (new Foo( array(1, array(4, 5), 3) ))[1][0] would previously throw just the one error, now it will throw two.
  • Throw the error on the token used for the access, not on the closing parenthesis of the parentheses wrappers.

Includes unit tests.

Note: no changes are made regarding class member access on clone as this only came into PHP in PHP 7.0, so both square brackets as well as curlies have been supported from the introduction of the feature. See: https://3v4l.org/fl7L9

The actual logic has been split off to a separate isClassMemberAccess() method to allow it to be re-used for the upcoming sniff which will detect the PHP 7.4 curly brace deprecation.

What with PHP 7.4 deprecating the array dereferencing syntax with curly braces, I've been doing some research on where this was supported up to now.

Turns out that, as of PHP 7.0, dereferencing class member access on instantiation using curly braces has been supported.
See: https://3v4l.org/KsEgH

While the PHP 7.0 changelog makes no note of this, the change was probably part of the PHP 7.0 [Uniform Variable Syntax](https://wiki.php.net/rfc/uniform_variable_syntax) changes.

This PR adjusts the `PHPCompatibility.Syntax.NewClassMemberAcces` sniff to:
* Also recognize curly braces.;
* Throw an error for each access detected, i.e. `(new Foo( array(1, array(4, 5), 3) ))[1][0]` would previously throw just the one error, now it will throw two.
* Throw the error on the token used for the access, not on the closing parenthesis of the parentheses wrappers.

Includes unit tests.

Note: no changes are made regarding class member access on `clone` as this only came into PHP in PHP 7.0, so both square brackets as well as curlies have been supported from the introduction of the feature. See: https://3v4l.org/fl7L9

The actual logic has been split off to a separate `isClassMemberAccess()` method to allow it to be re-used for the upcoming sniff which will detect the PHP 7.4 curly brace deprecation.
@wimg wimg merged commit 8ae721e into master Aug 28, 2019
@delete-merged-branch delete-merged-branch bot deleted the feature/newclassmemberaccess-recognize-curlies branch August 28, 2019 13:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants