php - PHP 中单引号和双引号字符串有什么区别?

标签 php string syntax

我有点困惑为什么我在 PHP 中看到一些代码,其中的字符串放在单引号中,有时放在双引号中。

我只知道在.NET或者C语言中,如果它是在单引号中,那就意味着它是一个字符,而不是一个字符串。

最佳答案

PHP strings不仅可以用两种方式指定,还可以用四种方式指定。

  1. Single quoted strings将几乎完全“按原样”显示内容。变量和大多数转义序列将不会被解释。异常(exception)的是,要显示文字单引号,您可以使用反斜杠 \' 将其转义。 ,并且要显示反斜杠,您可以使用另一个反斜杠 \\ 将其转义。 (所以是的,即使是单引号字符串也会被解析)。
  2. Double quote strings将显示大量转义序列(包括一些正则表达式),并且将评估字符串中的变量。这里重要的一点是您可以使用大括号来隔离要评估的变量的名称。例如,假设您有变量 $type你想要echo "The $types are" 。这将查找变量 $types 。要解决此问题,请使用 echo "The {$type}s are" 。看看string parsing了解如何使用数组变量等。
  3. Heredoc字符串语法的工作方式类似于双引号字符串。它以 <<< 开头。在该运算符之后,提供一个标识符,然后提供一个换行符。接下来是字符串本身,然后再次使用相同的标识符来结束引用。您不需要在此语法中转义引号。
  4. Nowdoc (自 PHP 5.3.0 起)字符串语法的工作原理本质上类似于单引号字符串。不同之处在于,甚至不需要转义单引号或反斜杠。 nowdoc 被标识为相同的 <<<用于此处文档的序列,但后面的标识符用单引号括起来,例如<<<'EOT'nowdoc 中不进行解析。

注释: 单引号内的单引号和双引号内的双引号必须转义:

$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";

速度:
没有区别
请阅读credible article一位 PHP 核心开发人员谈到了这个问题。说到测试,我们永远不应该认为它们是理所当然的。必须明白,编写可信的测试,特别是解释其结果需要大量的知识和经验。这意味着大多数测试都是假的。例如,在这样的代码中

for($i=0;$i<100000;$i++) {
    'string';
}

带引号的字符串与整个脚本一起仅被解析一次,然后被转换为操作码。然后它被执行一百万次。所以它测量除了解析之外的任何东西。这只是冰山一角。对于这样的纳米基准,几乎不可能创建一个不会被某些干扰性副作用破坏的可靠测试。

关于php - PHP 中单引号和双引号字符串有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52897757/

相关文章:

php - 如何在 PHP 中回显 HTML?

字符串处理

python - 当需要用 python pandas 替换字符串时,如何有效避免替换子字符串?

类似于 MATLAB 的 end/2 的 Python 索引

c++ - 第一个 "for"参数为空是什么意思?

php - Wordpress - 获取帖子的链接

javascript - 在 WordPress 插件中加载自定义 JavaScript

java - Java字符串的默认值: null vs ""

haskell - 为什么在没有括号的情况下不可能在haskell中乘以负数

PHP - 动态更改变量