Uniform variable syntax changed what $$a means

PHP 7 made variable-variable expressions evaluate consistently left to right. That is an improvement and it silently changed the meaning of expressions that had been working for a decade.

// PHP 5: ${$foo['bar']}
// PHP 7: ($$foo)['bar']
$$foo['bar']

// PHP 5: $foo->{$bar['baz']}
// PHP 7: ($foo->$bar)['baz']
$foo->$bar['baz']

These do not error — they resolve differently and produce a wrong value, which is the worst kind of change to migrate through. Braces make the intent explicit and work identically on both versions, so the safe migration is to brace every such expression before upgrading rather than after. They are rare in most codebases and endemic in old template engines.