PHP VERSION: 8.2.18

uniform_variable_syntax_expression_meaning_changes_1.php

<?php
// expression meaning changes

/*
                        // old meaning            // new meaning
$$foo['bar']['baz']     ${$foo['bar']['baz']}     ($$foo)['bar']['baz']
$foo->$bar['baz']       $foo->{$bar['baz']}       ($foo->$bar)['baz']
$foo->$bar['bat']()     $foo->{$bar['bat']}()     ($foo->$bar)['bat']()
Foo::$bar['ban']()      Foo::{$bar['ban']}()      (Foo::$bar)['ban']()
*/

$foo['bar']['baz'] = 'php5';
$a    'No idea why this is called in PHP5!';
$php5 'Works in PHP5';
$php7 'Works in PHP7';

// works in PHP5; generates error in PHP7
var_dump($$foo['bar']['baz']);
echo 
PHP_EOL;

$abc['bar']['baz'] = 'Works in PHP7';
$foo 'abc';

// works in PHP7; generates error in PHP5
var_dump($$foo['bar']['baz']);
echo 
PHP_EOL;

Output


NULL

string(13) "Works in PHP7"

SOURCE CODE