Я хочу знать, как 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
Ну ты имеешь ввиду $key['name']
или же $man->$key
а также ['name']
их? Это неоднозначный синтаксис, и PHP интерпретирует его по-прежнему, пытаясь получить индекс 'name'
строки 'name'
, что приводит к выводу предупреждения и интерпретации 'name'[0]
т.е. 'n'
,
Устранить неоднозначность синтаксиса:
$man->{$key}['name']
Это ни к чему не приводит, потому что вы пытаетесь получить доступ к свойству с помощью тега переменной. Это не переменная, она не будет работать:
echo $man->$key['name'];
Это с другой стороны будет работать:
echo $man->{$key}['name'];
Это позволяет php знать, что ключ $, который вы собираетесь использовать, на самом деле является свойством, заключенным в {}
В вашем классе не определено свойство name. Так как echo $man->$key['name']; convert to echo name['name];
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
но вы не можете получить доступ к значениям массива.
Так как $man
является объектом класса, если вы хотите напечатать его, он должен быть в классе, попробуйте этот код:
class Man{
var $arr=array("name"=>"me");
}
$key='name';
$man=new Man;
echo $man->arr[$key]; //output me