为什么echo" $ a-> b-> c"失败?

时间:2013-09-03 09:19:40

标签: php

编辑澄清问题。问题是PHP将在字符串中接受什么语法,而不是关于属性是否未定义。

PHP允许对象属性出现在字符串中,如下所示:

$a->b = "Hello, World!"
echo "PHP says: $a->b";

但是如果您尝试访问对象中更深的属性,则会发生致命错误:

$a->c->d = "Hello, World!"
echo "PHP says: $a->c->d";

您必须将引用放在字符串之外才能使其正常工作:

$a->c->d = "Hello, World!"
echo "PHP says: " . $a->c->d;

为什么PHP语法不接受字符串中的这个表单?

2 个答案:

答案 0 :(得分:2)

因为这就是PHPs string interpolation的工作方式。您正在使用"simple" variable parsing,这意味着

echo "PHP says: $a->c->d";

被解析为

echo "PHP says: {$a->c}->d";

因此PHP尝试将$a->b的值插入到字符串中。这不是因为它是一个对象,你会得到致命的错误:

Object of class stdClass could not be converted to string

如果$a->c是字符串值,例如"foo",则输出为:

  

PHP说:foo-> d

要实现您的目标,您需要使用"complex" variable parsing

echo "PHP says: {$a->c->d}";

答案 1 :(得分:1)

因为$a是具有b属性的对象,而$a->b不是对象或没有c属性?