2011-12-29 68 views
3

我读到这个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手册的任何链接的解释?

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

公告:未定义的属性:异常:: $的getMessage

+1

http://php.net/manual/en/language.types.string.php“变量解析” – Josh 2011-12-29 18:32:00

+0

@Josh请把你的答案放在答案部分,而不是评论部分所以我可以批准你的答案。 – GusDeCooL 2011-12-29 18:34:48

回答

16

它与这是一个复杂的表达式有关。如果你不包括支架,例如:

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

...那么PHP如何知道你想输出的变量?你可以尝试做以下任一操作:的$e

  • 输出值,其次是字符串“ - >的getMessage()”
  • 输出的$e->getMessage价值,其次是字符串“() “
  • 输出的$e->getMessage()

放置括号的完整表达式的值告诉PHP充分表达需要被评估,并包括在串英寸

+0

谢谢亚光:) – GusDeCooL 2011-12-29 18:39:29

0

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

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

什么是“它只是文本或代码”? – BoltClock 2011-12-29 18:35:06

+0

那么,如果你想回声阵列。 echo'Text $ arr ['item']';这不会回应,这就是为什么我们使用echo'Text {$ arr ['item']}'; – Arthur 2011-12-29 18:37:41

+0

对不起。但实际上,我并没有问及需要更好的代码。但为什么在那个教程中他们使用括号导致我在PHP中使用括号部分是新的。也许用括号可以改善我的编码风格。 – GusDeCooL 2011-12-29 18:42:03

1

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

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

+0

不,您会看到'$ e-> getMessage'后面跟着'()'表示的值。 – BoltClock 2011-12-29 18:34:51

2

可避免移动你的发言了引号的使用大括号:

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

但是,为了回答你原来的问题:花括号需要组变量名字连在一起,让PHP了解你”重新尝试回应。如果没有花括号,PHP会将该语句视为您打印的属性$e->getMessage和文字字符串'()',这当然不是您想要的。

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

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

1

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

1

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

复合物(花)语法

这不叫复杂,因为语法复杂,而是因为它允许使用复杂表达式。

任何具有字符串表示形式的标量变量,数组元素或对象属性均可通过此语法包含在内。简单地写出表达式的方式与字符串外部的方式相同,然后将其包装在{和}中。由于{不能被转义,这个语法只有在$紧跟在{之后才能被识别。使用{\ $获取文字{$。一些例子要说清楚: