我有点困惑为什么我在 PHP 中看到一些代码,其中的字符串放在单引号中,有时放在双引号中。
我只知道在.NET或者C语言中,如果它是在单引号中,那就意味着它是一个字符,而不是一个字符串。
Answer recommended by
PHP /collectives/php
Collective
PHP 字符串 https://php.net/manual/en/language.types.string.php 不仅可以指定two 方式,但在four ways.
单引号字符串 https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single 将几乎完全“按原样”显示内容。变量和大多数转义序列将不会被解释。例外的是,要显示文字单引号,您可以使用反斜杠对其进行转义\'
,并且要显示反斜杠,您可以使用另一个反斜杠对其进行转义\\
(所以是的,即使是单引号字符串也会被解析 ).
双引号字符串 https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double 将显示大量转义序列(包括一些正则表达式),并且将评估字符串中的变量。这里重要的一点是您可以使用花括号来隔离要评估的变量的名称 。例如,假设您有变量$type
你想要echo "The $types are"
。这将寻找变量$types
。为了解决这个问题echo "The {$type}s are"
。看一眼字符串解析 https://www.php.net/manual/en/language.types.string.php#language.types.string.parsing 了解如何使用数组变量等。
Heredoc https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc 字符串语法的工作方式类似于双引号字符串。它开始于<<<
。在该运算符之后,提供一个标识符,然后提供一个换行符。接下来是字符串本身,然后再次使用相同的标识符来结束引用。您不需要在此语法中转义引号。
Nowdoc https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc (自 PHP 5.3.0 起)字符串语法的工作原理本质上类似于单引号字符串。不同之处在于,甚至不需要转义单引号或反斜杠。 nowdoc 具有相同的标识<<<
用于此处文档的序列,但后面的标识符用单引号括起来,例如<<<'EOT'
. nowdoc 中不进行任何解析。
Notes: 单引号内的单引号和双引号内的双引号必须转义:
$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";
Speed: 有没有不同 . 请阅读可信的文章 https://www.npopov.com/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html 一位 PHP 核心开发人员谈到了这个问题。说到测试,我们永远不应该认为它们是理所当然的。必须明白,编写可信的测试,特别是解释其结果需要大量的知识和经验。这意味着大多数测试都是假的。例如,在这样的代码中
for($i=0;$i<100000;$i++) {
'string';
}
仅解析带引号的字符串once ,以及整个脚本,然后被翻译成操作码。然后它被执行一百万次。所以它测量除了解析之外的任何东西。这只是冰山一角。对于这样的纳米基准,几乎不可能创建一个不会被某些干扰性副作用破坏的可靠测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)