echo中的{}标记“{$ e-> getMessage()}”

时间:2011-12-29 18:28:58

标签: php

我读到了这个Article 我想知道这部分:

try {
    //First try getting our user numero uno
    $user = new User(1);

    //Then, let's try to get the exception
    $user2 = new User('not numeric');
} catch( Exception $e ) {
    echo "Donkey Kong has caught an exception: {$e->getMessage()}";
}

为什么{$e->getMessage()}必须用括号括起来?
关于这个有什么关于php手册的链接说明吗?

我知道如果我们不放括号它会显示错误,但我想要的是得到解释为什么需要括号。

  

注意:未定义的属性:Exception :: $ getMessage

6 个答案:

答案 0 :(得分:19)

这与这是一个复杂的表达这一事实有关。如果您不包括括号,即:

echo "Donkey Kong has caught an exception: $e->getMessage()";

...然后PHP如何知道您要输出的变量?您可能正在尝试执行以下任何操作:

  • 输出$e的值,后跟字符串“ - > getMessage()”
  • 输出$e->getMessage的值,后跟字符串“()”
  • 输出$e->getMessage()
  • 的值

在完整表达式周围放置括号,告诉PHP需要计算并包含在字符串中的完整表达式。

答案 1 :(得分:2)

您可以通过将语句移出引号来避免使用花括号:

echo 'Donkey Kong has caught an exception: ' . $e->getMessage();

但是要回答你原来的问题:需要花括号来将变量名称组合在一起,这样PHP才能理解你想要回应的内容。如果没有大括号,PHP会将语句视为打印出属性$e->getMessage和文字字符串'()',当然这不是您想要的。

有关详细信息,请参阅堆栈溢出问题PHP curly brace syntax for member variable

我个人建议使用我在上面提供的语法简单地连接字符串。

答案 2 :(得分:1)

PHP中使用大括号来输出字符串中的变量。有关更详细的说明,请参阅Curly braces in string in PHP

在这种情况下,$e是一个变量,您想输出$e->getMessage()的结果。如果没有花括号,您会看到实际的字符串Donkey Kong has caught an exception: $e->getMessage()

答案 3 :(得分:1)

这就是你在php字符串中插入复杂语法的方式。您可以阅读有关here

的更多信息

答案 4 :(得分:1)

http://php.net/manual/en/language.types.string.php

  

复杂(卷曲)语法

     

这不称为复杂,因为语法很复杂,但因为它允许使用复杂的表达式。

     

可以通过此语法包含任何具有字符串表示形式的标量变量,数组元素或对象属性。只需以与字符串外部相同的方式编写表达式,然后将其包装在{和}中。由于{无法转义,因此仅当$紧跟{时,才会识别此语法。使用{\ $获取文字{$。一些例子说清楚:

答案 5 :(得分:0)

因为php需要知道,它只是文本或代码。我最好这样做。

echo "Donkey Kong has caught an exception:".$e->getMessage();