интерпретатор — Как PHP интерпретирует этот код?

Я хочу знать, как php интерпретирует этот код. Это что-то из синтаксической ошибки или подходящего приорта? Я ценю любую помощь.
Код:

// php 5.3
class Man {
var $arr = array('name'=>'me');
}

$key = 'name';
$man = new Man();
echo $man->arr['name']; // output me
echo $man->$key['name']; // output nothing along with warning and notice

// output:
PHP Warning:  Illegal string offset 'name' in php shell code on line 1
PHP Notice:  Undefined property: Man::$n in php shell code on line 1

0

Решение

Ну ты имеешь ввиду $key['name'] или же $man->$key а также ['name'] их? Это неоднозначный синтаксис, и PHP интерпретирует его по-прежнему, пытаясь получить индекс 'name' строки 'name', что приводит к выводу предупреждения и интерпретации 'name'[0]т.е. 'n',

Устранить неоднозначность синтаксиса:

$man->{$key}['name']
3

Другие решения

Это ни к чему не приводит, потому что вы пытаетесь получить доступ к свойству с помощью тега переменной. Это не переменная, она не будет работать:

echo $man->$key['name'];

Это с другой стороны будет работать:

echo $man->{$key}['name'];

Это позволяет php знать, что ключ $, который вы собираетесь использовать, на самом деле является свойством, заключенным в {}

0

В вашем классе не определено свойство name. Так как echo $man->$key['name']; convert to echo name['name];

0

class Man {
var $arr = array("name"=>"me");
}

$key = 'arr';
$man = new Man();
echo $man->arr['name']; // output me
echo $man->{$key}['name']; // output nothing along with warning and notice

Посмотрите, как я использовал квадратные скобки вокруг $key, Если вы не предоставите скобки, это интерпретирует $key[0] :

echo $man->a но вы не можете получить доступ к значениям массива.

0

Так как $man является объектом класса, если вы хотите напечатать его, он должен быть в классе, попробуйте этот код:

class Man{
var $arr=array("name"=>"me");
}
$key='name';
$man=new Man;
echo $man->arr[$key]; //output me
0
По вопросам рекламы [email protected]