是否有任何不同的输入:
<?php echo $_SERVER[REQUEST_URI] ?>
和
<?php echo $_SERVER['REQUEST_URI'] ?>
和最后
<?php echo $_SERVER["REQUEST_URI"] ?>?
他们都工作......我使用第一个。 也许一个比另一个快?
由于
A Noob
答案 0 :(得分:17)
没有引号PHP将REQUEST_URI
解释为常量,但如果没有这样的常量则会更正错字错误并将其解释为字符串。
当error_reporting
包含E_NOTICE
时,您可能会收到错误,例如:
注意:在&lt; line number&gt
但是如果有一个具有此名称的常量,PHP将使用常量的值。 (另见Array do's and don'ts)
因此,当您指的是字符串时,请始终使用引号。否则可能会产生不必要的副作用。
对于单引号和双引号字符串的区别,请参阅PHP manual about strings。
答案 1 :(得分:3)
第一个是错误的 - 你实际上在寻找一个不存在的常数REQUEST_URI
。这将生成通知级警告。
其他两个没有区别。
答案 2 :(得分:2)
PHP字符串处理中的单引号和双引号之间存在差异。用双引号括起来的字符串将被评估嵌入变量和转义字符(例如\ n);用单引号括起来的字符串不会(或没有那么多)。
所以,例如,
$hello = "world";
echo "Hello $hello!\n";
echo 'Hello $hello!\n';
echo 'Done';
将输出
Hello world!你好$ hello!\ nDone
在没有转义字符或嵌入变量的情况下,使用单引号效率稍高,因为运行时需要较少的字符串处理。然而,许多人(包括我)更喜欢使用双引号来保存所有字符串。
答案 3 :(得分:1)
作为对Gumbo的回答的警告,第三种表示 - 双引号 - 实际上使PHP在该字符串中查找变量。因此,该方法可能会慢一点(尽管在11个字符的字符串中它可以忽略不计 - 但最好不要让PHP这样做)。
答案 4 :(得分:1)
当PHP遇到用作数组键的普通字符串时,它会检查是否存在具有该名称的常量,如果没有,则将其默认为数组键。因此,不使用引号会导致轻微的性能损失,并且结果可能不是您所期望的。
答案 5 :(得分:-1)
$_SERVER[REQUEST_URI]
在语法上是不正确的,AFAIK将无法在PHP5的默认安装上运行。数组索引是一个字符串,因此需要在字符串上传递。我知道PHP4将未定义的常量转换为方括号内的字符串,但它仍然不是很好的做法。
编辑:除非您定义一个名为REQUEST_URI的常量,否则您的示例脚本中没有这个常量。
$_SERVER['REQUEST_URI']
是标准方法以及您应该使用的方法。
$_SERVER["REQUEST_URI"]
也可以工作,虽然没有错,但PHP解释器的工作稍微多一点,所以除非你需要解析变量,否则不应该使用它。 (如果你需要这样做,你需要重新考虑你的那部分程序。