1.9 单引号与双引号

在PHP中,理解单引号与双引号的区别是重要的。如迄今为止的示例中所示的那样,给字符串赋值时可以使用echoprint语句。但是,这两种引号之间以及何时该用哪种引号存在关键的区别。迄今为止,我详细说明了它们的区别,但是,现在将更明确地定义它们的使用模式。

在PHP中,括在单引号内的值将照字面意义进行处理,而括在双引号内的值将被解释。换句话说,把变量和特殊字符(参见表1-2)放在双引号内将导致打印出它们表示的值,而不是它们的字面量值。例如,假定你具有:

$var = 'test';

代码echo "var is equal to $var";将打印出var is equal to test,而代码echo 'var is equal to $var';将打印出var is equal to $var。使用一个转义的美元符号,代码echo "\$var is equal to $var";将打印出$var is equal to test,而代码echo '\$var is equal to $var';将打印出\$var is equal to $var(参见图1-21)。

表1-2 当在双引号内使用这些字符时,它们具有特殊的含义
转义字符的代码 转义字符的含义
\" 双引号
\' 单引号
\\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
\$ 美元符号

图1-21 单引号与双引号在PHP打印时的区别

正如这些示例所说明的,双引号将用变量的值(test)代替它的名称($var),并用特殊字符表示的值($)代替它的代码(\$)。单引号总是准确地打印你输入的内容,除了转义的单引号(\')和转义的反斜杠(\\)之外,它们将被分别打印为一个单引号和一个反斜杠。

在另一个说明这两种引号的区别的示例中,我将修改numbers.php脚本,以此作为试验。

使用单引号和双引号

1. 在文本编辑器或IDE中打开numbers.php(参见脚本1-8)。

2. 删除现有的echo语句(参见脚本1-10)。

脚本1-10 这个最终的脚本演示了使用单引号和双引号之间的区别

1    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3    <head>
4       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5       <title>Quotation Marks</title>
6    </head>
7    <body>
8    <?php # Script 1.10 - quotes.php
9    
10   // Set the variables:
11   $quantity = 30; // Buying 30 widgets.
12   $price = 119.95;
13   $taxrate = .05; // 5% sales tax.
14   
15   // Calculate the total.
16   $total = $quantity * $price;
17   $total = $total + ($total * $taxrate); // Calculate and add the tax.
18   
19   // Format the total:
20   $total = number_format ($total, 2);
21   
22   // Print the results using double quotation marks:
23   echo "<h3>Using double quotation marks:</h3>";
24   echo "<p>You are purchasing <b>$quantity</b> widget(s) at a cost  of <b>\$$price</b> each.With tax, the total comes to <b>\$$total </b>. </p>\n";
25   
26   // Print the results using single quotation marks:
27   echo '<h3>Using single quotation  marks:</h3>';
28   echo '<p>You are purchasing  <b>$quantity</b> widget(s) at a cost  of <b>\$$price</b> each.With tax, the total comes to <b>\$$total </b>. </p>\n';
29   
30   ?>
31   </body>
32   </html>

3. 打印一个标题,然后使用双引号重写原来的echo语句。

echo "<h3>Using double quotation marks:</h3>";
echo "<p>You are purchasing <b>$quantity</b> widget(s) at a cost of <b>\$$price</b> each. With tax, the total comes to <b>\$$total</b>.</p>\n";

在原始脚本中,将使用单引号和连接运算符打印结果。通过使用双引号,可以得到相同的结果。在使用双引号时,可以将变量置于字符串内。

不过,这里有一个难题:尝试将美元金额打印为$12.34(其中12.34来自于一个变量)将建议你编码$$var。这样不行,应该对初始美元符号进行转义,得到\$$var,这段代码中已经出现了两次。第一个美元符号会被打印,而第二个美元符号则是变量名称的开始字符。

4. 重复使用echo语句,这一次使用单引号。

echo '<h3>Using single quotation marks:</h3>';
echo '<p>You are purchasing <b>$quantity</b> widget(s) at a cost of <b>\$$price</b> each. With tax, the total comes to <b>\$$total</b>.</p>\n';

这个echo语句用于突出使用单引号和双引号之间的区别。它将不会像所期望的那样工作,并且得到的页面将说明怎么回事。

5. 如果需要,可更改页面的标题。

6. 将文件另存为quotes.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-22)。

图1-22 这些结果演示了何时以及如何使用一种引号,而不使用另一种引号

7. 查看Web页面的源代码,看看在每一种引号内使用换行符(\n)会有什么区别。

你应该会看到,当把换行符置于双引号内时,它会在HTML源代码中创建一个新行。当把它置于单引号内时,将代之以打印字符字面量\n

提示

  • 由于PHP将试图找出那些需要将其值插入到双引号内的变量,所以从理论上讲,使用单引号要快一些。但是,如果需要打印一个变量的值,则必须使用双引号。

  • 因为有效的HTML常常包括许多用双引号括住的属性,所以当利用PHP打印HTML时,使用单引号最容易。

    echo '<table width="80%" border="0" cellspacing="2" cellpadding="3" align="center">';
    

    如果想使用双引号打印出这段HTML代码,将不得不对字符串中的所有双引号进行转义。

    echo "<table width=\"80%\" border= \"0\" cellspacing=\"2\" cellpadding=\"3\" align=\" center\">";
    
  • 在新版本的PHP中,可以使用$$price$$total而不用在前面加反斜杠(\),这得益于一些“内部魔法”。而其他版本的PHP不能这样做。为了确保结果的可靠性,我建议无论使用什么PHP版本,都使用\$$var语法打印美元字符,后面紧接变量的值。

  • 如果你仍然不清楚这两种引号之间的区别,可以使用双引号,这样不太可能出问题。

目录