编辑澄清问题。问题是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语法不接受字符串中的这个表单?
答案 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
属性?