Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何解释这段代码?_Php_Interpreter - Fatal编程技术网

PHP如何解释这段代码?

PHP如何解释这段代码?,php,interpreter,Php,Interpreter,我想知道php是如何解释这段代码的。是语法错误还是匹配优先?非常感谢您的帮助。 代码: 那么,你是指$key['name']还是$man->$key和['name']?它的语法不明确,PHP以前一种方式解释它,试图获取字符串'name'的索引'name',导致输出警告,解释为'name'[0],即'n' 消除语法歧义: $man->{$key}['name'] 那么,你是指$key['name']还是$man->$key和['name']?它的语法不明确,PHP以前一种方式解释它,试图获

我想知道php是如何解释这段代码的。是语法错误还是匹配优先?非常感谢您的帮助。
代码:


那么,你是指
$key['name']
还是
$man->$key
['name']
?它的语法不明确,PHP以前一种方式解释它,试图获取字符串
'name'
的索引
'name'
,导致输出警告,解释为
'name'[0]
,即
'n'

消除语法歧义:

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

那么,你是指
$key['name']
还是
$man->$key
['name']
?它的语法不明确,PHP以前一种方式解释它,试图获取字符串
'name'
的索引
'name'
,导致输出警告,解释为
'name'[0]
,即
'n'

消除语法歧义:

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

这不会转换为任何内容,因为您试图使用变量标记访问属性。这不是一个变量,它不会起作用:

echo $man->$key['name'];
另一方面,这将起作用:

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

这让php知道您将要使用的$key实际上是一个包装在{}

中的属性,这不会转换为任何内容,因为您试图访问带有变量标记的属性。这不是一个变量,它不会起作用:

echo $man->$key['name'];
另一方面,这将起作用:

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

这让php知道您将要使用的$key实际上是一个包装在{}

中的属性,您的类中没有定义name属性。因为
echo$man->$key['name'];转换为回显名称['name]

类中没有定义名称属性。因为
echo$man->$key['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
但您无法访问数组值

看看我是如何在
$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

因为
$man
是类的对象,如果您想打印一些,它应该在类中,请尝试以下代码:

class Man{
    var $arr=array("name"=>"me");
}
$key='name';
$man=new Man;
echo $man->arr[$key]; //output me

$key
名称
Man
类中没有属性
name
。这就是为什么会有一个警告。上面的语法看起来也像PHP4语法。请尽量避免,您的同事会很感激的。PHP 7还有另一个输出(
注意:未定义的属性:Man::$name
):
$key
name
Man
类中没有属性
name
。这就是为什么会有一个警告。上面的语法看起来也像PHP4语法。请尽量避免,您的同事会很感激的。PHP 7还有另一个输出(
注意:未定义的属性:Man::$name
):非常感谢,塞萨尔·费雷拉。很高兴我能帮上忙;)非常感谢,塞萨尔·费雷拉。很高兴我能帮忙;)@如果您认为这个答案解决了您的问题,请单击灰色复选图标将其标记为已接受。这是一种复杂(卷曲)语法。这里是链接:我认为它试图获取字符串“n”而不是字符串“name”的索引
'name'
。如果不提供括号,则只考虑字符串的第一个字符。@Pooya“非法字符串偏移量'name'”→ 它试图获取字符串的偏移量
['name']
,这显然意味着它正在尝试
$key['name']
,其中
$key
是字符串。由于
'name'
是字符串的无效/非法偏移量,因此会产生此警告。然后返回到将偏移量
'name'
解释为下一个最佳数值偏移量,它最终是
0
(int)'name'
→ <代码>0
)。因此它会产生
$key[0]
。然后将其转换为
$man->n
和“未定义的属性:
man:$n
”。请参阅。@如果您认为此答案解决了您的问题,请单击灰色复选图标将其标记为已接受。这是一种复杂(卷曲)语法。这里是链接:我认为它试图获取字符串“n”而不是字符串“name”的索引
'name'
。如果不提供括号,则只考虑字符串的第一个字符。@Pooya“非法字符串偏移量'name'”→ 它试图获取字符串的偏移量
['name']
,这显然意味着它正在尝试
$key['name']
,其中
$key
是字符串。由于
'name'
是字符串的无效/非法偏移量,因此会产生此警告。然后返回到将偏移量
'name'
解释为下一个最佳数值偏移量,它最终是
0
(int)'name'
→ <代码>0
)。因此它会产生
$key[0]
。然后将其转换为
$man->n
和“未定义的属性:
man:$n
”。看,我觉得你的解释不对$此->$key['name']将解释为“name['name']”,但name没有索引“name”,因此它将返回“name[0]”,即“n”。请参考deceze的答案。@Max看我自己的例子
$key='arr'
和$arr已经有了索引
name
,但php仍然将
$key
解释为
$a
。只需运行没有括号的示例,然后查看结果。我希望你这次能得到。如果有什么不清楚的就告诉我。很抱歉。忽略我的评论。我认为你的解释不正确$此->$key['name']将解释为“name['name']”,但name没有索引“name”,因此它将返回“name[0]”,即“n”。请参考deceze的答案。@Max看我自己的例子
$key='arr'
和$arr已经有了索引
name
,但php仍然将
$key
解释为
$a
。只需运行我的示例