我想知道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 :(得分:3)
那么,您是指$key['name']
还是$man->$key
及其['name']
吗?这是语法的模棱两可,PHP正以一种前一种方式解释它,试图获取字符串'name'
的索引'name'
,导致输出警告,解释为'name'[0]
,即{{1} }。
消除语法歧义:
'n'
答案 1 :(得分:0)
这不会转换为任何东西,因为您试图访问带有变量标签的属性。这不是变量,将无法工作:
echo $man->$key['name'];
另一方面,这将起作用:
echo $man->{$key}['name'];
这使php知道您将要使用的$ key实际上是包装在{}中的属性
答案 2 :(得分:0)
您的课程中没有定义名称属性。因为echo $man->$key['name']; convert to echo name['name];
答案 3 :(得分: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
,但您无法访问数组值。
答案 4 :(得分:0)
因为$man
是类的对象,如果您想打印一些,应该在类中尝试以下代码:
class Man{
var $arr=array("name"=>"me");
}
$key='name';
$man=new Man;
echo $man->arr[$key]; //output me