我读到了这个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
答案 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();