PHP VERSION: 8.2.18

uniform_variable_syntax_expression_meaning_changes_2.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']()
*/

class Foo
{
    public 
$test  = ['baz' => 'Works in PHP7'];
    public 
$php5  'Works in PHP5';
    public 
$t     'In PHP5 dereferences 1st character in the string "test"';
}

$bar = ['baz' => 'php5'];
$foo = new Foo();

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

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

Output


NULL

string(13) "Works in PHP7"

SOURCE CODE