在PHP中,理解单引号与双引号有什么区别是重要的。如本章的示例中所示的那样,可以使用echo()或print()语句,但是,这两个语句以及使用它们的原因之间有一个关键的区别。迄今为止,我详细说明了何时应该使用它们,但是,现在将更明确地定义它们的使用模式。
在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-2 当在双引号内使用这些字符时,它们具有特殊的含义
转义字符的代码 |
转义字符的含义 |
\" |
双引号 |
\' |
单引号 |
\\ |
反斜杠 |
\n |
换行符 |
\r |
回车符 |
\t |
制表符 |
\$ |
美元符号 |
正如这些示例所说明的,双引号将用变量的值(test)代替它的名称($var),并用特殊字符表示的值($)代替它的代码(\$)。单引号总是准确地打印你输入的内容,除了转义的单引号(\')和转义的反斜杠(\\)之外,它们将分别被打印为一个单引号和一个反斜杠。
当给变量赋值或者将数据作为参数发送给函数时,上述规则适用于echo()或print()语句内使用的任何引号。在另一个说明两种引号的区别的示例中,我将修改numbers.php脚本,以此作为试验。
使用单引号和双引号
(1) 在文本编辑器中打开numbers.php(参考脚本1-9)。
(2) 删除现有的echo()语句(脚本1-11)。
脚本1-11 这个最终的脚本演示了使用单引号和双引号之间的区别
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
6 <title>Quotation Marks</title>
7 </head>
8 <body>
9 <?php # Script 1.11 - quotes.php
10
11 // Set the variables.
12 $quantity = 30; // Buying 30 widgets.
13 $price = 119.95;
14 $taxrate = .05; // 5% sales tax.
15
16 // Calculate the total.
17 $total = $quantity * $price;
18 $total = $total + ($total * $taxrate); // Calculate and add the tax.
19 $total = number_format ($total, 2);
20
21 // Print the results.
22 echo 'Using double quotation marks:<br />';
23 echo "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>.\n";
24
25 echo '<p><hr /></p>Using single quotation marks:<br />';
26 echo '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>.\n';
27 ?>
28 </body>
29 </html>
(3) 打印一个标题,然后使用双引号重写原来的echo()语句。
echo 'Using double quotation marks: <br />';
echo "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>.\n";
通过使用双引号而不是单引号和连接运算符,可以得到这个脚本相同的预期结果??打印购买的器具数量、购买价格以及含税的总金额,如同它原来所做的那样。注意:我还使用了\$$variable技术来生成像$3778.43这样的结果(第一个美元符号会被打印,而第二个美元符号则是变量名称的开始字符)。
(4) 重复使用第一个echo()语句,这一次使用单引号。
echo '<p><hr /></p>Using single quotation marks: <br />';
echo '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>.\n';
第一行用于增加一些间距和一个水平标尺,其后接着一个标题。第二个echo()语句用于突出显示使用单引号和双引号之间的区别。
(5) 如果需要,可更改页面的标题。
(6) 将文件另存为quotes.php,上载到Web服务器,并在Web浏览器中测试它。
图这些结果演示了何时以及如何使用一种引号,而不使用另一种引号提示
l 由于PHP将试图找出那些需要将其值插入到双引号内的变量,所以从理论上讲,使用单引号要快一些。但是,如果需要打印一个变量的值,则必须使用双引号。
l 因为有效的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\">";
l PHP还支持引用文本的heredoc方法。如果你已经熟悉了这个概念,并且对替代方法感到好奇,可以检查PHP手册,以了解正确的语法。