【问题标题】:How to use $_SERVER['REQUEST_URI']如何使用 $_SERVER['REQUEST_URI']
【发布时间】:2009-02-17 13:39:47
【问题描述】:

打字有什么区别:

<?php echo $_SERVER[REQUEST_URI] ?>

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

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

?

它们都有效...我使用第一个。 也许一个比另一个快?

【问题讨论】:

  • 只是一个友好的建议 - 以未来问题的形式提出问题。它使他们更容易快速掌握,当周围有这么多问题时,这一点很重要。

标签: php


【解决方案1】:

不带引号的 PHP 将 REQUEST_URI 解释为常量,但如果没有这样的常量,则更正您的拼写错误并将其解释为字符串。

error_reporting 包含E_NOTICE 时,您可能会收到如下错误:

注意:使用未定义的常量 REQUEST_URI - 在

中假定为“REQUEST_URI”

但是如果有一个具有此名称的常量,PHP 将使用该常量的值来代替。 (另见Array do's and don'ts

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

关于单引号和双引号字符串的区别,请参见PHP manual about strings

【讨论】:

    【解决方案2】:

    第一个是错误的——你实际上是在寻找一个不存在的常量REQUEST_URI。这将生成通知级别的警告。

    其他两个没有区别。

    【讨论】:

    • 第三个会不会比第二个慢,因为 php 会在字符串中寻找变量名?
    • 这绝对可以忽略不计。您应该更好地优化除此之外的其他内容。
    • 仍然是一个有用的标准。仅在有要解析的变量时使用双引号(或者偶尔如果您懒得转义撇号)。
    • 是的,我知道这可以忽略不计。但是说“其他两者没有区别”。不是真的,当您处理更大的字符串等时,可能值得考虑
    【解决方案3】:

    PHP 字符串处理中的单引号和双引号是有区别的。用双引号括起来的字符串将被评估为嵌入变量和转义字符(例如 \n);用单引号括起来的字符串不会(或没有那么多)。

    例如,

    $hello = "world";
    
    echo "Hello $hello!\n";
    echo 'Hello $hello!\n';
    echo 'Done';
    

    会输出

    你好世界!
    你好 $hello!\n完成

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:
          $_SERVER[REQUEST_URI]
          

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

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

          $_SERVER['REQUEST_URI']
          

          是标准方法,你应该使用什么。

          $_SERVER["REQUEST_URI"]
          

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

          【讨论】:

          • 如果存在同名的常量,第一个例子在语法上是正确的。
          • 确实如此。然而,这个脚本由整整三行组成,其中没有一个看起来像 define("REQUEST_URI", $_SERVER['REQUEST_URL']);
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-22
          • 2017-08-15
          • 2019-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多