繁体   English   中英

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

[英]What is the difference between single-quoted and double-quoted strings in PHP?

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

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

PHP 字符串不仅可以通过两种方式指定,还可以通过四种方式指定。

  1. 单引号字符串将几乎完全“按原样”显示内容。 不会解释变量和大多数转义序列。 例外情况是,要显示文字单引号,您可以使用反斜杠\'对其进行转义,而要显示反斜杠,您可以使用另一个反斜杠\\对其进行转义(所以是的,即使是单引号字符串也会被解析)。
  2. 双引号字符串将显示大量转义字符(包括一些正则表达式),并且将评估字符串中的变量。 这里重要的一点是,您可以使用花括号来隔离要评估的变量的名称 例如,假设您有变量$type并且您想echo "The $types are" 这将寻找变量$types 要解决这个问题,请使用echo "The {$type}s are"您可以将左大括号放在美元符号之前或之后。 查看字符串解析以了解如何使用数组变量等。
  3. Heredoc字符串语法类似于双引号字符串。 它以<<<开头。 在此运算符之后,提供一个标识符,然后是一个换行符。 字符串本身紧随其后,然后再次使用相同的标识符来关闭引号。 您不需要在此语法中转义引号。
  4. Nowdoc (自 PHP 5.3.0 起)字符串语法本质上与单引号字符串类似。 不同之处在于,甚至不必转义单引号或反斜杠。 nowdoc 使用与 heredocs 相同的<<<序列标识,但后面的标识符用单引号括起来,例如<<<'EOT' nowdoc 中不进行任何解析。

注意:单引号内的单引号和双引号内的双引号必须进行转义:

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

速度:
我不会过分强调单引号比双引号快。 在某些情况下,它们可能更快。 这是一篇文章,解释了自 PHP 4.3 以来单引号和双引号基本上同样快的一种方式Useless Optimizations朝向底部, C节)。 此外,这个基准页面有一个单引号和双引号比较。 大多数比较是相同的。 有一个比较,双引号比单引号慢。

事物用双引号而不是单引号进行评估:

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

'单引号

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

例子:

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 必须解析以检查字符串中是否有任何变量。

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

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

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

在 PHP 中, 'my name'"my name"都是字符串。 您可以在 PHP 手册中了解更多信息。

你应该知道的是

$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";

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

单引号、双引号、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;

?>

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

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

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

有人可能会说我有点跑题了,但无论如何:

您不一定要选择,因为您的字符串内容介于:
echo "It's \"game\" time."; echo 'It\'s "game" time.';

如果您熟悉英文引号的使用,以及撇号的正确字符,您可以使用双引号或单引号,因为它不再重要了:
echo "It's “game” time."; echo 'It's “game” time.';

当然,如果需要,您也可以添加变量。 只是不要忘记它们只有在双引号中才会被评估!

一件事:

非常重要的是要注意具有Heredoc结束标识符的行不能包含任何其他字符,除了分号 (;) 这尤其意味着标识符不能缩进,并且分号前后不能有任何空格制表符

例子:

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

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

$world = "world";

"Hello '.$world.' ";

'hello ".$world."';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM