PHP如何解释此代码?

时间:2018-07-24 09:20:13

标签: php interpreter

我想知道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

5 个答案:

答案 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