Php 为什么可以';“你不能进入吗?”;“更深的”;当所述对象变量在字符串中使用时,对象变量?

Php 为什么可以';“你不能进入吗?”;“更深的”;当所述对象变量在字符串中使用时,对象变量?,php,Php,我的意思是,虽然你可以这样做: $foo = "Yo dawg I herd you like $bar->baz"; 这: 导致以下错误: "Object of class * could not be converted to string" 最干净的方式似乎是: $baz = $bar->baz; $foo = "Yo dawg I herd you like $baz->qux"; 那么,为什么它不起作用,有更好的解决方案吗 注意: 我知道有些人喜欢把他们的变量

我的意思是,虽然你可以这样做:

$foo = "Yo dawg I herd you like $bar->baz";
这:

导致以下错误:

"Object of class * could not be converted to string"
最干净的方式似乎是:

$baz = $bar->baz;

$foo = "Yo dawg I herd you like $baz->qux";
那么,为什么它不起作用,有更好的解决方案吗

注意:

我知道有些人喜欢把他们的变量放在字符串之外,但这不是讨论这些偏好的场所,也没有解决我要问的问题,所以如果你不考虑这些主观情绪,我将不胜感激。多谢各位

$foo = "Yo dawg I herd you like {$bar->baz->qux}";


我能给你的唯一原因是设计师选择了这种方式来实现它。例如,不能在大括号中包含函数返回值。这只是一个设计选择。

因为一个简单的插值(参见“变量解析”部分中的描述)被明确设计为仅插值嵌入的“变量、数组值或字符串中的对象属性”

请注意,它的设计目的是插入“对象属性”,而不是“任意表达式”。要实现后者,您的解析器在解析字符串时需要做更为困难的工作


对于任意表达式,您需要使用PHP4中引入的复杂(卷曲)语法,将所述表达式用大括号括起来:
{$bar->baz->qux}
在字符串中。

我很好奇为什么需要括号。而且,我甚至不知道这叫什么,所以我不确定在哪里可以找到关于它的文档。如果你能提供一个链接(或者在这个答案中引用),那就太好了。谢谢@伪造-查看文档链接和“为什么”的我的答案@webbiedave:只是提醒一下,我对两个答案都投了赞成票,但DVK首先给出了完整的答案,所以我将他的答案标记为接受。还有,我很确定谁否决了你,因为你没有解释原因。他们可能没有检查你是否编辑了你的答案。@Fake Code:在我添加了why之后,它被否决了。不过没问题。我只是好奇。谢谢你的投票。@Webbiedve:我想我们都想知道为什么。我也被否决了。我敢肯定DVK也这么做了。老实说,这一切都很有趣。我没有生气,只是想知道为什么。:)是的,我认为这也适用于在实例中使用变量:
$inst1->$inst2->attribute
不起作用,但是
$i2\u att=$inst2->attribute$inst1->$i2_附件工作正常,因为有些人就是不能处理真相
$foo = "Yo dawg I herd you like {$bar->baz->qux}";