-4

编辑以澄清问题。问题在于 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 语法不接受字符串中的这种形式?

4

2 回答 2

2

因为这就是PHP 字符串插值的工作方式。您正在使用“简单”变量解析,这意味着

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

要实现您想要的,您需要使用“复杂”变量解析

echo "PHP says: {$a->c->d}";
于 2013-09-03T10:23:05.907 回答
1

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

于 2013-09-03T09:20:57.627 回答