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 $object.

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.

Consistency Fixes

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
// Syntax
$$var['key1']['key2'];
// PHP 5.x:
// Using a multidimensional array value as variable name
${$var['key1']['key2']};
// PHP 7:
// Accessing a multidimensional array within a variable-variable
($$var)[ ...

Get Upgrading to PHP 7 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.