引号等

时间:2009-02-17 13:39:48

标签: php

是否有任何不同的输入:

<?php echo $_SERVER[REQUEST_URI] ?>

<?php echo $_SERVER['REQUEST_URI'] ?>

和最后

<?php echo $_SERVER["REQUEST_URI"] ?>?

他们都工作......我使用第一个。 也许一个比另一个快?

由于

A Noob

6 个答案:

答案 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解释器的工作稍微多一点,所以除非你需要解析变量,否则不应该使用它。 (如果你需要这样做,你需要重新考虑你的那部分程序。