Php 如何使用$服务器[';请求URI';]

Php 如何使用$服务器[';请求URI';],php,Php,打字之间有什么区别吗: <?php echo $_SERVER[REQUEST_URI] ?> 或 或 ? 他们都在工作。。。我用第一个。 可能一个比另一个快?不带引号的PHP将请求URI解释为常量,但如果没有此类常量,则更正键入错误并将其解释为字符串 当包含时,您可能会出现如下错误: 注意:使用未定义的常量REQUEST\u URI-在联机中假定为'REQUEST\u URI' 但是如果有一个具有此名称的常量,PHP将使用该常量的值。(另见) 因此,当您指字符串时,请

打字之间有什么区别吗:

<?php echo $_SERVER[REQUEST_URI] ?>



?

他们都在工作。。。我用第一个。
可能一个比另一个快?

不带引号的PHP将
请求URI
解释为常量,但如果没有此类常量,则更正键入错误并将其解释为字符串

当包含时,您可能会出现如下错误:

注意:使用未定义的常量REQUEST\u URI-在联机中假定为'REQUEST\u URI'

但是如果有一个具有此名称的常量,PHP将使用该常量的值。(另见)

因此,当您指字符串时,请始终使用引号。否则可能会产生不必要的副作用


关于单引号字符串和双引号字符串的区别,请参见。

第一个是错误的-您实际上在寻找一个不存在的常量
请求URI
。这将生成通知级别的警告


其他两个之间没有区别。

作为Gumbo回答的警告,第三个表示形式-双引号-实际上让PHP在该字符串中查找变量。因此,该方法可能会稍微慢一点(尽管在11个字符的字符串中,它可以忽略不计——但最好不要让PHP这样做)。

在PHP字符串处理中,单引号和双引号之间存在差异。用双引号括起来的字符串将针对嵌入变量和转义字符进行求值(例如。\n);用单引号括起来的字符串将不会(或不会太多)

那么比如说,

$hello = "world";

echo "Hello $hello!\n";
echo 'Hello $hello!\n';
echo 'Done';
将输出

你好,世界
你好$你好\恩多内

在没有转义字符或嵌入变量的情况下,使用单引号稍微有效一些,因为它需要运行时更少地处理字符串。然而,许多人(包括我)更喜欢对所有字符串使用双引号以避免混淆

$_SERVER[REQUEST_URI]
语法不正确,AFAIK将不会在默认安装的PHP5上运行。数组索引是一个字符串,因此需要在字符串上传递它。我知道PHP4将未定义的常量转换为方括号内的字符串,但这仍然不是好的做法

编辑:除非您定义了一个名为REQUEST_URI的常量,而您的示例脚本中没有这个常量

$_SERVER['REQUEST_URI']
是标准方法和您应该使用的方法

$_SERVER["REQUEST_URI"]

也可以工作,虽然没有错,但是PHP解释器的工作稍微多一些,所以除非您需要为变量解析它,否则不应该使用它。(如果您需要这样做,您需要重新考虑程序的这一部分。

当PHP遇到用作数组键的纯字符串时,它会检查是否有一个具有该名称的常量,如果没有,它将默认返回数组键。因此,不使用引号会导致轻微的性能下降,并且可能会导致ult将不是您所期望的。

第三个不是比第二个慢吗,因为php将在字符串中查找变量名?这是完全可以忽略的。您应该更好地优化其他内容。这仍然是一个有用的标准。只有在有变量要解析时才使用双引号(或者偶尔,如果你懒得避开撇号的话)。是的,我知道这可以忽略不计。但是说“其他两个没有区别。”事实并非如此,当您处理较大的字符串等时,可能值得考虑第一个示例在语法上是正确的,如果有一个常量使用该名称。确实如此。但是,该脚本由整整三行组成,没有一行看起来像define(“REQUEST\u URI”、$\u SERVER['REQUEST\u URL'));只是一个友好的建议-提出标题为“未来问题”的问题。这样可以使问题更容易快速掌握,这在有这么多问题时很重要。
$_SERVER['REQUEST_URI']
$_SERVER["REQUEST_URI"]