用PHP解释字符串的类型

时间:2012-12-19 03:16:07

标签: php

  

可能重复:
  Difference between single quote and double quote string in php

我是PHP的新手,我对如何指定字符串感到有些困惑。

似乎有4种指定字符串的方法

  1. 单引号字符串
  2. 双引号字符串
  3. 定界符
  4. Nowdoc(自PHP 5.3.0起)
  5. 我想知道为什么有这么多类型的规范以及指定字符串的最佳方法是什么?

    因为在this 文章中它再次说单引号和双引号同样快,但还有其他人不同意。

    为什么甚至有单引号和双引号?它是否会增加速度,在某些条件下精度是否更好?

3 个答案:

答案 0 :(得分:2)

单引号字符串比双引号字符串更注意转义序列。比较:

echo "one\ntwo";
# one
# two

使用:

echo 'one\ntwo';
# one\ntwo

另一个关键区别是双引号字符串插入变量。单引号字符串不会。

至于heredoc和nowdoc,它们只是用一种更好的方式指定长字符串(可能包含引号 - 如果它们有,你不必逃避它们)的方法。为什么有两个?好吧,heredoc是双引号字符串,因为nowdoc是单引号字符串。

(顺便提一下,所有这些信息都可以提供in the PHP documentation。)

因此,有很多不同类型的字符串文字,因为字符串文字有很多不同的用途。

答案 1 :(得分:2)

http://php.net/manual/en/language.types.string.php

  • 单引号字符串基本上是普通字符串。它们仅在编译脚本时解析
  • 双引号字符串在运行时解析
  • Heredocs 是一种使用开头和结尾的特殊序列在多行上定义双引号字符串的方法
  • Nowdocs 是Heredocs的内容,只是像单引号字符串一样未解析

就性能而言,单引号字符串通常比双引号字符串更好,因为它们基本上代表常量。因此,在大多数情况下,您将需要使用单引号字符串。

然而,通常情况下,双引号字符串在准备输出时非常实用

$combined = "An $a and $b plus $c";
$combined = 'An '.$a.' and '.$b.' plus '.$c;

这些行是相同的,但你可能猜到哪个更易于编写和维护。

您应该记住,虽然这对PHP来说非常具体,但大多数其他编程语言都支持类似的语法,但同样处理它们。所以对于那些他们真正存在的只是让你更容易在字符串中写引号(考虑"Someone can't handle an apostrophe, but it's not me."'<p class="some">Text.</p>')而不必逃避每一个。

答案 2 :(得分:0)

单引号内的每个字符和变量都按字面处理(有一个例外是\'的组合,请参阅下面的“转义字符”)。以下代码不具有打印变量值的预期结果:

  $name = 'Jon'; 
  echo 'Hello, $name';

该代码将逐字打印“Hello,$ name”。

相反,将解释双引号内的字符和变量。 此代码将打印“Hello,Jon”:

$name = 'Jon'; 
echo "Hello, $name";

几乎所有特殊转义序列也需要在双引号内使用。由于双引号字符串的解释,它们可能效率低于单引号字符串。但对于大多数应用来说,效率差异无关紧要。