Chapter 3. Uniform Variable Syntax
Until the Uniform Variable Syntax RFC was proposed, I had never considered just how inconsistent PHP’s variable syntax was, particular around variable-variables and variable-properties.
For example, given the syntax
$object->$array[key];, as developers we are just expected to know that PHP will first resolve
$array[key] to a string and then access the property named by that string on the
With Uniform Variable Syntax, all of this inconsistency is fixed, and while it is a backward-incompatible change, it is fairly trivial to change your code to be both forward- and backward-compatible, but it is also a very difficult change to spot.
With uniform variable syntax all variables are evaluated from left to right.
This is primarily only an issue when constructing complex dynamic variables and properties. As you can see in Example 3-1 we are moving from the inconsistent PHP 5.x behavior to a new left to right consistent behavior. Also, as shown in Example 3-1, you can achieve the same PHP 5.x behavior in PHP 7, or the new PHP 7 behavior in PHP 5.x by explicitly specifying the order of operations with the addition of appropriate parentheses
() and braces
Example 3-1. Examples of left-to-right consistency changes
// PHP 5.x:
// Using a multidimensional array value as variable name
// PHP 7:
// Accessing a multidimensional array within a variable-variable