我有点困惑为什么在PHP代码中有的字符串放在单引号中,有的放在双引号中。
我只知道在.NET或C语言中,如果用单引号括起来,那就是一个字符,而不是一个字符串。
PHP字符串不仅可以使用两种方式指定,而是可以使用四种方式。
\'
进行转义,并且要显示反斜杠,可以用另一个反斜杠\\
进行转义(所以,即使单引号字符串也会被解析)。$type
的变量,您想要echo "The $types are"
。那么它将寻找变量$types
。为了避免这种情况,可以使用echo "The {$type}s are"
。请参见字符串解析以了解如何使用数组变量等。<<<
开始。在此运算符之后提供标识符,然后是换行符。接下来是字符串本身,然后是相同的标识符以关闭引号。在这种语法中,不需要转义引号。<<<
序列进行标识,但是其后跟随的标识符用单引号括起来,例如<<<'EOT'
。在nowdoc中不进行解析。注意:单引号字符串中的单引号和双引号字符串中的双引号必须进行转义:
$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";
速度:
没有任何区别。
请阅读一篇可信的文章,来自PHP核心开发人员之一。在测试方面,我们不应该轻信它们。必须理解编写可信测试,尤其是解释其结果需要大量知识和经验。这意味着大多数测试都是错误的。例如,在如下代码中:
for($i=0;$i<100000;$i++) {
'string';
}
引号包含的字符串只会被解析一次,与整个脚本一起转换成操作码。然后该操作码将被执行一百万次。因此,它测量的不是解析时间,而这仅仅是冰山一角。对于像这样的微型基准测试,几乎不可能创建一个可靠的测试,因为某些干扰性副作用会破坏测试结果。
在双引号中的内容会被计算,但是单引号中的不会:
$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
$mailbody = 'I want a line break:\nDone.';
会保留 \n
,而 $mailbody = "I want a line break:\nDone.";
则会解析出换行符。请注意区分使用单引号和双引号。 - Avatar$testWithAsciiAndUtf8Characters = "\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!";
$simpleTest = '\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!';
在$testWithAsciiAndUtf8Characters
中的字符序列被转换为具有实际字母的字符串。 - Rostyslav Pylypenko'
单引号指定字符串最简单的方法是用单引号将其括起来。单引号内的所有内容都被视为纯字符串。
示例:
echo 'Start with a simple string';
echo 'Variables $var and escape sequences \n do not get interpolated';
echo 'You only need to escape the quote \' and a backslash itself\\';
"
双引号双引号字符串可以插入变量和各种转义序列。请注意:使用花括号 {}
来包含复杂变量或者在变量后面的字符是一个合法变量名字符时。
示例:
echo "Start with a simple string";
echo "String's apostrophe";
echo "Escape sequences get interpolated\n";
echo "Variables $var get interpolated as well {$name}_sake";
没有。
为了提高性能,PHP会一次解析整个代码,然后将结果的字节码存储在opcode缓存中。这种方法除了任何引用字符串外,还会消除整个解析过程。
\'
转义单引号以在字符串内部使用它(或者使用 \\'
显示反斜杠)。请注意,传统的转义序列,如 \n
不会被解析为换行符。PHP 字符串文档 - SherylHohman"{$one}"
而不是"$one"
的原因不是阅读性,而是确切的变量查找。{ }
也允许数组和对象查找。用于连接字符串的点运算符仍然需要用于函数查找。 - Justin{$foo}bar
,因为 $foobar
会被解释为 {$foobar}
。 - alexia单引号字符串中的变量不会被解释。而双引号字符串会解释其中的变量。
此外,双引号字符串可以包含省略反斜杠的单引号,而单引号字符串可以包含未转义的双引号。
在PHP中,'my name'
和"my name"
都是字符串。你可以在PHP手册中了解更多相关信息。
你需要知道的是:
$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'
在PHP中,人们使用单引号来定义一个常量字符串,比如 'a'
,'我的名字'
,'abc xyz'
,而使用双引号来定义一个包含标识符的字符串,例如 "a $b $c $d"
。这两种封闭字符都是字符串。一种引号方便地用于封闭另一种引号。"'"
和 '"'
。这两种引号的最大区别在于,双引号中包含的标识符引用会被替换,但单引号中不会。
有些人可能会觉得我离题了,但是这里还是要说一下:
你不需要因为字符串内容而在以下选项中做出选择:
echo "It's \"game\" time.";
或者 echo 'It\'s "game" time.';
如果你熟悉英文引号的使用及正确的撇号字符,那么你可以使用双引号或单引号,因为它们都不再重要:
echo "It’s “game” time.";
和 echo 'It’s “game” time.';
当然,如果需要添加变量的话也可以。只要记住,当在双引号内时它们才会被计算!
${变量名}
。 - devios1\n
时才使用双引号,在我的PHP
代码中,其他任何内容都用单引号。 - Jo Smo"
速度变慢的情况已经几乎不存在了。目前,更新已经让大多数情况下双引号的处理速度跟其他字符一样快了。 - SherylHohman