PHP Замечание: преобразование массива в строку только на PHP 7

Я новичок в PHP. Я изучаю его с php.net , но сегодня я нашел проблему.

 class foo { var $bar = 'I am bar.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo "{$foo->$bar}\n"; echo "{$foo->$baz[1]}\n"; 

В документации ( http://php.net/manual/en/language.types.string.php ) говорится, что приведенный выше пример будет выводиться:

 I am bar. I am bar. 

Но я получаю различные выходные результаты на моем ПК (PHP 7):

 I am bar. <b>Notice</b>: Array to string conversion in ... on line <b>9</b><br /> <b>Notice</b>: Undefined property: foo::$Array in ... on line <b>9</b><br /> 

Зачем?

Это должно работать с PHP 7:

 class foo { var $bar = 'I am bar.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo "{$foo->$bar}\n"; echo "{$foo->{$baz[1]}}\n"; 

Это вызвано тем, что в PHP 5 следующая строка:

 echo "{$foo->$baz[1]}\n"; 

интерпретируется как:

 echo "{$foo->{$baz[1]}}\n"; 

Хотя в PHP 7 это интерпретируется как:

 echo "{{$foo->$baz}[1]}\n"; 

И поэтому в PHP 7 он передает весь массив в $ foo вместо этого элемента.

Просто назначьте массив переменной и используйте эту переменную при вызове функции. Это будет работать … Я исправил эту проблему таким образом.

Потому что, когда вы приходите на PHP 7, это будет передавать весь массив, когда мы непосредственно использовали его при вызове функции.

EX: $ fun'myfun '; // Не будем работать на PHP7.

$ fun_name = $ fun ['myfun']; $ Fun_name (); // Будет работать на PHP7.