Skip to content

NewFunctionArrayDereferencing: recognize function array dereferencing using curly braces#853

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

NewFunctionArrayDereferencing: recognize function array dereferencing using curly braces#853
wimg merged 1 commit intomasterfrom
feature/newfunctionarraydereferencing-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, function array dereferencing using curly braces has been supported.
See: https://3v4l.org/a1TW6

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.NewFunctionArrayDereferencing sniff to:

  • Also recognize curly braces.;
  • Throw an error for each access detected, i.e. $foo->bar()[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 function call.

Includes unit tests.

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

… using curly braces

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, function array dereferencing using curly braces has been supported.
See: https://3v4l.org/a1TW6

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.NewFunctionArrayDereferencing` sniff to:
* Also recognize curly braces.;
* Throw an error for each access detected, i.e. `$foo->bar()[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 function call.
* Prevent false positives on functions declared by reference.

Includes unit tests.

The actual logic has been split off to a separate `isFunctionArrayDereferencing()` method to allow it to be re-used for the upcoming sniff which will detect the PHP 7.4 curly brace deprecation.
@jrfnl jrfnl force-pushed the feature/newfunctionarraydereferencing-recognize-curlies branch from fe7d4c1 to 2012bb7 Compare August 21, 2019 10:49
@wimg wimg merged commit 658b03c into master Aug 28, 2019
@delete-merged-branch delete-merged-branch bot deleted the feature/newfunctionarraydereferencing-recognize-curlies branch August 28, 2019 13:59
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