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