提问



我不是PHP编程方面的专家,但我有点困惑为什么我在PHP中看到一些代码用字母串在单引号中,有时用双引号。


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

最佳参考


PHP字符串不仅可以用两种方式指定,还可以用四种方式指定。[38]



  1. 单引号字符串将几乎完全按原样显示内容。变量和大多数转义序列都不会被解释。例外情况是,要显示文字单引号,您可以使用反斜杠\'对其进行转义,并显示反斜杠,您可以使用另一个反斜杠\\将其转义(所以是,甚至解析单引号字符串)。

  2. 双引号字符串将显示一系列转义字符(包括一些正则表达式),并且将评估字符串中的变量。这里的一个重点是您可以使用花括号来隔离您想要评估的变量的名称。例如,让我们说你有变量$type和你echo "The $types are"那将寻找变量$types。为了解决这个问题echo "The {$type}s are"你可以把在美元符号之前或之后左支撑。看一下字符串解析,看看如何使用数组变量等。

  3. Heredoc 字符串语法就像双引号字符串一样。它以<<<开头。在此运算符之后,提供标识符,然后提供换行符。字符串本身如下,然后再次使用相同的标识符来关闭引号。你不需要在这种语法中转义引号。

  4. Nowdoc (自PHP 5.3.0起)字符串语法基本上与单引号字符串相同。不同之处在于,甚至不需要转义单引号或反斜杠。使用与heredocs相同的<<<序列识别nowdoc,但是后面的标识符用单引号括起来,例如, <<<'EOT'在nowdoc中没有解析。



速度结果
我不会过分强调单引号比双引号更快。在某些情况下,它们可能更快。这篇文章解释了一种方式,其中单引号和双引号基本上同样快,自PHP 4.3(Useless Optimizations到底部,C)。此外,这个基准页面有一个单引号和双引号比较。大多数比较是相同的。有一个比较,其中双引号比单引号慢。[39] [40] [41] [42] [43] [44] [45]

其它参考1


事情用双引号评估,但不是单引号:


$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.

其它参考2


单引号



指定字符串的最简单方法是将其用单引号括起来。单引号通常更快,内部引用的所有内容都被视为普通字符串。


例:


echo 'Start with a simple string';
echo 'String\'s apostrophe';
echo 'String with a php variable'.$name;


双引号



在PHP中使用双引号以避免必须使用句点来分隔代码(注意:如果您不想在字符串中使用连接(.)运算符,请使用大括号{}来包含变量。


例:


echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";


PHP中的单引号与双引号是否有性能优势?



是。使用单引号稍微快一些。


PHP不会使用额外的处理来解释单引号内的内容。当你使用双引号时,PHP必须解析以检查那里是否有任何变量。

其它参考3


单引号字符串中没有解释变量。双引号字符串。


此外,双引号字符串可以包含没有反斜杠的撇号,而单引号字符串可以包含未转义的引号。


单引号字符串在运行时更快,因为它们不需要被解析。

其它参考4


在PHP中,'my name'"my name"都是字符串。您可以在PHP手册中阅读更多相关信息。[46]


你应该知道的是


$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'


在PHP中,人们使用单引号来定义常量字符串,如'a''my name''abc xyz',而使用双引号来定义包含"a $b $c $d"等标识符的字符串。


还有一件事是,


echo 'my name';


比...更快


echo "my name";





echo 'my ' . $a;


比...慢


echo "my $a";


对于其他使用的字符串也是如此。

其它参考5


single,double,heredoc和nowdoc引用的示例



<?php

    $fname = "David";

    // Single quotes
    echo 'My name is $fname .'; // My name is $fname.

    // Double quotes
    echo "My name is $fname."; // My name is David.`

    // Curly braces to isolate the name of the variable
    echo "My name is {$fname}."; // My name is David.

    // Example of heredoc
    echo $foo = <<<abc
    My name is {$fname}
    abc;

        // Example of nowdoc
        echo <<< 'abc'
        My name is "$name".
        Now, I am printing some
    abc;

?>

其它参考6


两种封闭的字符都是字符串。一种报价方便地用于包含其他类型的报价。 "'"'"'。引号类型之间的最大区别是封闭的标识符引用替换为内部双引号,但不在单引号内。

其它参考7


在PHP中,单引号文本被视为字符串值,双引号文本将通过替换和处理它们的值来解析变量。


$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test


这里,双引号解析值,单引号被视为字符串值(不解析$ test变量。)

其它参考8


也许我有点晚了,有点偏离主题,但不管怎么说......



你不必选择因为你的字符串之间的内容:

alert("It's \"game\" time.");alert('It\'s "game" time.');


相反,你可以这样输入,然后使用双引号或单引号,因为它不重要:

alert("It’s “game” time.");alert('It’s “game” time.');

其它参考9


$name = 'test';
$singleQuote = 'This is example for single quote $name'; // here $name variable not evaluating 
echo $singleQuote; // Output: This is example for single quote $name
$singleQuote = "This is example for single quote $name"; // here $name variable will evaluate and replace variable value
echo $singleQuote; // Output: This is example for single quote test

Also inside single quote expression evaluate faster campare to double quotes

其它参考10


一件事:


请务必注意,结尾标识符为 Heredoc 的行必须不包含其他字符,但分号(;)除外。这尤其意味着标识符可能不是缩进,并且在分号之前或之后可能没有任何空格标签


示例:


   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;