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

时间:2010-08-10 05:12:56

标签: php string syntax

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

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

12 个答案:

答案 0 :(得分:1007)

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

  1. Single quoted strings几乎完全“按原样”显示内容。变量和大多数转义序列都不会被解释。例外情况是,要显示文字单引号,您可以使用反斜杠\'对其进行转义,并显示反斜杠,您可以使用另一个反斜杠\\来转义它(所以是的,甚至解析单引号字符串)。
  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用与heredocs相同的<<<序列标识,但后面的标识符用单引号括起来,例如: <<<'EOT'在nowdoc中没有解析。
  5. <强>速度
    我不会过分强调单引号比双引号更快。在某些情况下,它们可能更快。这是一篇文章explaining one manner in which single and double quotes are essentially equally fast since PHP 4.3Useless Optimizations到底部,C部分。此外,此benchmarks page具有单引号与双引号比较。大多数比较是相同的。有一个比较,其中双引号比单引号慢。

答案 1 :(得分:191)

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

$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 :(得分:45)

'单引号

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

示例:

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 :(得分:36)

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

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

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

答案 4 :(得分:24)

在PHP中,'my name'"my name"都是字符串。您可以阅读更多相关信息at the PHP manual

你应该知道的是

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

在PHP中,人们使用单引号来定义常量字符串,例如'a''my name''abc xyz',而使用双引号来定义包含{{1}等标识符的字符串}。

还有其他的事情,

"a $b $c $d"

echo 'my name';

echo "my name";

慢于

echo 'my ' . $a;

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

答案 5 :(得分:16)

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 :(得分:12)

在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变量。)

答案 7 :(得分:11)

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

答案 8 :(得分:1)

在php中使用单引号和双引号之间的区别在于,如果我们在echo语句中使用单引号,则将其视为字符串。 ...但是如果我们在双引号中输入变量名称,则它将输出该变量的值以及字符串。

答案 9 :(得分:0)

也许我有点晚了,而且有点偏离主题,但无论如何......无论如何......

您不必因为字符串的内容而选择:
alert("It's \"game\" time.");alert('It\'s "game" time.');

相反,你可以这样输入,然后使用双引号或单引号,因为它不重要:
alert("It’s “game” time.");alert('It’s “game” time.');

答案 10 :(得分:-1)

一件事:

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

示例:

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

答案 11 :(得分:-2)

这里有一些单引号和双引号带有变量的可能性

$world = "world";

"Hello '.$world.' ";

'hello ".$world."';