PHP可以使用不同类型的数据。在本章中,您将了解单个值,例如数字和单个文本。您将学习如何在程序中放置文本和数字,以及PHP引擎对这些值的一些限制以及操作它们的一些常见技巧。
大多数PHP程序花费大量时间处理文本,因为它们花费大量时间生成HTML并使用数据库中的信息。HTML只是一种特殊格式的文本; 数据库中的信息,例如用户名,产品描述或地址,也是一段文字。轻松切片和切块文本意味着您可以轻松地构建动态网页。
在第1章中,您看到了变量的实际应用,但本章将向您详细介绍它们。变量是一个包含值的命名容器。变量保存的值可以在程序运行时更改。当您访问从表单提交的数据或与数据库交换数据时,您使用变量。在现实生活中,变量就是您的支票账户余额。随着时间的推移,短语“支票账户余额”指的是波动的值。在PHP程序中,变量可能包含已提交表单参数的值。每次程序运行时,提交的表单参数的值都可以不同。但无论价值如何,您都可以使用相同的名称来引用它。本章还更详细地解释了变量是什么:如何创建它们以及执行诸如更改其值或打印它们之类的操作。
文本
当它们在计算机程序中使用时,文本片段称为字符串。这是因为它们由串联在一起的单个物品组成。字符串可以包含字母,数字,标点符号,空格,制表符或任何其他字符。字符串的一些例子是I would like 1 bowl of soup
,和Is it too hot?" he asked
,和There's no spoon!
。字符串甚至可以包含二进制文件的内容,例如图像或声音.PHP程序中字符串长度的唯一限制是你的内存量电脑有。
小费
PHP中的字符串是字节序列,而不是字符。如果您只处理英文文本,那么这种区别不会影响您。如果您使用非英语文本并且需要确保正确处理其他字母表中的字符,请务必阅读第20章,其中讨论了使用不同的字符集。
定义文本字符串
有几种方法可以表示PHP程序中的字符串。最简单的是用单引号括起字符串:
1 | <? php print 'How are you?'; print 'I'm fine.'; ?> |
由于字符串由单引号内的所有内容组成,因此打印的内容如下:
1 | I would like a bowl of soup.chicken06520"I am eating dinner," he growled. |
请注意,这四个print
语句的输出全部出现在一行上。没有添加换行符 print
。1
单引号不是字符串的一部分。它们是分隔符,它告诉PHP引擎字符串的开头和结尾。如果要在用单引号括起来的字符串中包含单引号,请\
在单引号内放一个反斜杠()字符串:
1 | print 'We\'ll each have a bowl of soup.'; |
该\'
序列变成'
里面的字符串,那么什么是印刷是:
1 | We'll each have a bowl of soup. |
反斜杠告诉PHP引擎将以下字符视为文字单引号而不是单引号,这意味着“字符串结束。”这称为 转义,反斜杠称为转义字符。转义字符告诉系统对其后面的字符执行特殊操作。在单引号字符串中,单引号通常表示“字符串结尾”。在带有反斜杠的单引号之前,将其含义更改为文字单引号字符。
转义字符本身可以被转义。包含文字反斜杠字符在字符串中,在它前面加一个反斜杠:
1 | print 'Use a \\ to escape in a string'; |
这打印:
1 | Use a \ to escape in a string |
第一个反斜杠是转义字符:它告诉PHP引擎下一个字符发生了不同的事情。这会影响第二个反斜杠:而不是特殊操作(“按字面意思处理下一个字符”),字符串中包含一个文字反斜杠。
请注意,这些是从左上角到右下角的反斜杠,而不是从左下角到右上角的向前滑动。请记住,PHP程序(//
)中的两个正斜杠表示注释。
您可以在单引号字符串中包含空格,例如换行符:
1 2 3 4 5 | print '<ul> <li>Beef Chow-Fun</li> <li>Sauteed Pea Shoots</li> <li>Soy Sauce Noodles</li> </ul>'; |
这将HTML放在多行:
1 2 3 4 5 | <ul> <li>牛肉</li> <li>炒好吃的豌豆笋</li> <li>酱油面条</li> </ul> |
由于标记字符串结尾的单引号紧跟在字符串结尾之后</ul>
,因此字符串末尾没有换行符。
在单引号字符串中获得特殊处理的唯一字符是反斜杠和单引号。其他一切都按字面意思对待。
您还可以使用分隔字符串双引号。双引号字符串类似于单引号字符串,但它们具有更多特殊字符。表2-1列出了这些特殊字符。
字符 | 含义 |
---|---|
\n | 换行符(ASCII 10) |
\r | 回车(ASCII 13) |
\t | 标签(ASCII 9) |
\\ | \ |
\$ | $ |
\" | “ |
\0 .. \777 | 八进制(基数为8) |
\x0 .. \xFF | 十六进制(基数为16)的数字 |
表2-1。双引号字符串中的特殊字符
单引号和双引号字符串之间的最大区别在于包含变量名称时在双引号字符串中,变量的值被替换为字符串,单引号字符串不会发生这种情况。例如,如果变量$user
保存了值Bill
,那么 'Hi $user'
就是:Hi $user
。但是,"Hi $user"
是Hi Bill
。 “变量”更详细地介绍了这一点。
如“PHP in Action”中所述,您还可以使用here文档语法定义字符串。这里的文档以 <<<
和分隔符开头。它在一行的开头以相同的单词结尾。例2-1显示了这里的文档。
例2-1。这里的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | <<<HTMLBLOCK <html> <head><title>Menu</title></head> <body bgcolor="#fffed9"> <h1>Dinner</h1> <ul> <li> Beef Chow-Fun <li> Sauteed Pea Shoots <li> Soy Sauce Noodles </ul> </body> </html> HTMLBLOCK |
在例2-1中,分隔符字是 HTMLBLOCK
。这里的文档分隔符可以包含字母,数字和下划线字符。分隔符的第一个字符必须是字母或下划线。最好将此处文档分隔符中的所有字母设为大写,以便在视觉上设置此处的文档。结束此处文档的分隔符必须单独在其行上。分隔符不能缩进,并且后面不允许使用空格,注释或其他字符。唯一的例外是在分隔符后立即允许分号结束语句。在这种情况下,分号后不能在同一行上。例2-2中的代码 遵循这些规则进行打印这是一份文件。
例2-2。打印此处文档
1 2 3 4 5 6 7 8 9 10 11 12 13 | print <<<HTMLBLOCK <html> <head><title>Menu</title></head> <body bgcolor="#fffed9"> <h1>Dinner</h1> <ul> <li> Beef Chow-Fun <li> Sauteed Pea Shoots <li> Soy Sauce Noodles </ul> </body> </html> HTMLBLOCK; |
这里的文档遵循相同的转义字符和变量替换规则作为双引号字符串。这使得它们在您想要定义或打印包含大量文本或包含大量变量的HTML的字符串时特别有用。稍后在本章的后面,示例2-22演示了这一点。
要结合两个字符串,使用.
(句号),字符串 连接运算符。以下是一些组合字符串:
1 2 3 4 | print 'bread' . 'fruit'; print "It's a beautiful day " . 'in the neighborhood.'; print "The price is: " . '$3.95'; print 'Inky' . 'Pinky' . 'Blinky' . 'Clyde'; |
组合字符串打印为:
1 2 3 4 | breadfruit It's a beautiful day in the neighborhood. The price is: $3.95 InkyPinkyBlinkyClyde |
操纵文本
PHP有许多内置函数,在处理字符串时很有用。本节介绍对两个常见任务最有帮助的功能:验证和格式化。在线PHP手册的“字符串”章节提供了有关其他内置字符串处理函数的信息。
1 2 3 4 5 6 7 8 9 10 | // $_POST['zipcode'] holds the value of the submitted form parameter // "zipcode" $zipcode = trim($_POST['zipcode']); // Now $zipcode holds that value, with any leading or trailing spaces // removed $zip_length = strlen($zipcode); // Complain if the zip code is not 5 characters long if ($zip_length != 5) { print "Please enter a zip code that is 5 characters long."; } |
使用trim()
保护来防止输入732
两个空格的邮政编码的人。有时额外的空间是偶然的,有时它们是恶意的。无论是什么原因,在适当的时候扔掉它们以确保你得到你关心的弦长。
你可以连续的调用trim()
,并 strlen()
为更简洁的代码。实施例2-4与实施例2-3的相同之处。
例2-4。简洁地检查修剪过的绳子的长度
1 2 3 | if (strlen(trim($_POST['zipcode'])) != 5) { print "Please enter a zip code that is 5 characters long."; } |
在例2-4的第一行中发生了四件事。首先,将变量的值$_POST['zipcode']
传递给trim()
函数。其次,该函数的返回值 – $_POST['zipcode']
删除了前导和尾随空格 – 被传递给strlen()
函数,然后该函数返回修剪后的字符串的长度。第三,将这个长度与之比较5
。最后,如果长度不等于5
在print
里面的语句if()
块运行。
比较 两个字符串,使用等于operator(==
),如例2-5所示。
例2-5。比较字符串与相等的运算符
1 2 3 | if ($_POST['email'] == 'president@whitehouse.gov') { print "Welcome, US President."; } |
例2-5中的print
语句仅在以下情况下运行提交的表单参数 email
是全小写 president@whitehouse.gov
。在比较字符串时==
,案例很重要。字符串president@whitehouse.GOV
与 President
@Whitehouse.Gov
or不同 president@whitehouse.gov
。
要比较字符串而不注意案例,请使用strcasecmp()
。 它比较两个字符串,同时忽略大小写的差异。如果您提供的两个字符串strcasecmp()
相同,独立于大写和小写字母之间的任何差异,则返回 0
。例2-6 显示了如何使用strcasecmp()
。
例2-6。不区分大小写地比较字符串
1 2 3 | if (strcasecmp($_POST['email'], 'president@whitehouse.gov') == 0) { print "Welcome back, US President."; } |
的print
陈述实施例2-6所提交的形式参数运行email
是President@Whitehouse.Gov
,PRESIDENT@WHITEHOUSE.GOV
,presIDENT@whiteHOUSE.GoV
,或的任何其他资本president@whitehouse.gov
。
1 2 | $price = 5; $tax = 0.075; printf('The dish costs $%.2f', $price * (1 + $tax)); |
这打印:
1 | The dish costs $5.38 |
在例2-7中,格式规则 %.2f
被替换为值$price * (1 +
$tax)
和格式,以便它有两个小数位。
格式化字符串规则开头,%
然后有一些可选的修饰符,影响规则的作用:
- 填充字符
- 如果替换格式规则的字符串太短,则用于填充它。使用空格填充空格或
0
使用零填充。 - 一个牌子
- 对于数字,加号(
+
)printf()
在正数之前放置一个+(通常,它们打印时没有符号。)对于字符串,减号(-
)使printf()
字符串右对齐(通常,它们是左对齐的) 。) - 最小宽度
- 这指定了替换格式规则的值应该是的最小大小。如果它更短,那么填充字符用于加强它。
- 句号和精确数
- 对于浮点数,它控制小数点后面的位数。在例2-7中,这是唯一存在的修饰符。带有两个小数位的
.2
格式$price *
(1 + $tax)
。
修饰符后出现一个强制性字符,表示应该打印哪种值。这里讨论的三个是 d
十进制数,s
字符串和f
浮点数。
如果这个百分号和修饰符的炖肉让你挠头,不要担心。最常用的 printf()
可能是使用%.2f
格式规则格式化价格, 如例2-7所示。如果你printf()
现在没有吸收任何其他东西 ,只要记住它是你想要格式化十进制值的首选功能。
但如果你深入研究一下,你可以用它做一些其他方便的事情。例如,使用0
填充字符和最小宽度,您可以使用前导零正确格式化日期或邮政编码,如例2-8所示。
例2-8。使用printf()进行零填充
1 2 3 4 5 6 | $zip = '6520'; $month = 2; $day = 6; $year = 2007; printf("ZIP is %05d and the date is %02d/%02d/%d", $zip, $month, $day, $year); |
例2-8打印:
1 | ZIP is 06520 and the date is 02/06/2007 |
符号修饰符有助于明确指示正值和负值。例2-9用它来显示一些温度。
例2-9。用printf()显示标志
1 2 3 | $min = -40; $max = 40; printf("The computer can operate between %+d and %+d degrees Celsius.", $min, $max); |
例2-9打印:
1 | The computer can operate between -40 and +40 degrees Celsius. |
要了解其他printf()
格式规则,请访问 http://www.php.net/sprintf。
另一种文本格式是 操纵字符串的情况。功能strtolower()
和 strtoupper()
制作分别为字符串的全小写和全大写版本。例2-10显示strtolower()
并strtoupper()
在工作。
例2-10。改变案例
1 2 | print strtolower('Beef, CHICKEN, Pork, duCK'); print strtoupper('Beef, CHICKEN, Pork, duCK'); |
例2-10打印:
1 2 | beef, chicken, pork, duck BEEF, CHICKEN, PORK, DUCK |
该ucwords()
函数将字符串中每个单词的首字母大写。strtolower()
当这些名称以全部大写形式提供给您时,这与组合使用时非常有用。例2-11显示了如何组合strtolower()
和ucwords()
。
例2-11。使用ucwords()对名称进行优化
1 | print ucwords(strtolower('JOHN FRANKENHEIMER')); |
例2-11打印:
1 | John Frankenheimer |
有了这个 substr()
功能,你只能提取一部分字符串。例如,您可能只想在摘要页面上显示消息的开头。示例2-12显示了如何使用substr()
截断提交的表单参数comments
。
例2-12。使用substr()截断字符串
1 2 3 4 | // Grab the first 30 bytes of $_POST['comments'] print substr($_POST['comments'], 0, 30); // Add an ellipsis print '...'; |
如果提交的表单参数comments
是:
1 | The Fresh Fish with Rice Noodle was delicious, but I didn't like the Beef Tripe. |
例2-12打印:
1 | The Fresh Fish with Rice Noodl... |
三个参数substr()
是要使用的字符串,要提取的子字符串的起始位置以及要提取的字节数。字符串的开头是位置0,而不是1,所以substr($_POST['comments'], 0, 30)
意味着“从$_POST['comments']
字符串的开头开始提取30个字节 ”。
当您substr()
为起始位置给出负数时,它会从字符串的末尾开始计算,以确定从哪里开始。起始位置-4
表示“从结尾开始四个字节。” 示例2-13使用负起始位置仅显示信用卡号的最后四位数字。
例2-13。用substr()提取字符串的结尾
1 2 | print 'Card: XX'; print substr($_POST['card'],-4,4); |
如果提交的表单参数card
是 4000-1234-5678-9101
,则示例2-13 打印:
1 | Card: XX9101 |
作为捷径,请使用substr($_POST['card'],-4)
而不是substr($_POST['card'], -4,4)
。当你省略最后一个参数时,substr()
返回从起始位置(无论是正数还是负数)到字符串结尾的所有内容。
该str_replace()
函数不是提取子字符串,而是更改字符串的一部分。它查找子字符串并用新字符串替换子字符串。这对于简单的基于模板的HTML自定义很有用。例2-14 用于str_replace()
设置 标签的class
属性<span>
。
例2-14。使用str_replace()
1 2 3 4 | $html = '<span class="{class}">Fried Bean Curd<span> <span class="{class}">Oil-Soaked Fish</span>'; print str_replace('{class}',$my_class,$html); |
如果$my_class
已设置为lunch
,则 示例2-14打印:
1 2 | <span class="lunch">Fried Bean Curd<span> <span class="lunch">Oil-Soaked Fish</span> |
{class}
(第一个参数to str_replace()
)的每个实例都被作为传递给的第三个参数的字符串中 的lunch
(值)替换 。$my_class
str_replace()
1 2 3 4 5 6 7 8 9 10 11 | print 56; print 56.3; print 56.30; print 0.774422; print 16777.216; print 0; print -213; print 1298317; print -9912111; print -12.52222; print 0.00; |
1 2 3 4 | print 2 + 2; print 17 - 3.5; print 10 / 3; print 6 * 9; |
例2-16的输出是:
1 2 3 4 | 4 13.5 3.3333333333333 54 |
除了加号sign(+
)添加,-
用于减法的减号(),用于除法的正斜杠(/
), 和asterisk(*
)用于乘法,PHP还支持两个星号(**
)用于取幂和%
模数的百分号() 除法(返回除法运算的剩余部分):
1 | print</code> <code class="mi">17</code> <code class="o">%</code> <code class="mi">3</code><code class="p">; |
这打印:
1 | <span>2</span> |
由于17除以3是5,余数为2,17%3等于2.模数运算符对于打印CSS类名在HTML表中交替的行非常有用,如例4-13所示。
算术运算符,以及其他算术运算符 您将在本书后面讨论的PHP运算符符合严格的操作优先级。这就是PHP引擎如何以模糊方式编写,决定以何种方式进行计算。例如,“3 + 4 * 2”可能意味着“添加3和4,然后将结果乘以2”,结果为14.或者,它可能意味着“将4加到4和2的乘积”,结果11.在PHP(以及一般的数学世界)中,乘法具有比加法更高的优先级,因此第二种解释是正确的。首先,PHP引擎将4和2相乘,然后将结果加3。
所有PHP运算符的优先级表都是在线PHP手册的一部分。但是,您可以避免记忆或重复参考此表,但需要使用健康的括号。括号内的分组操作明确地告诉PHP引擎首先执行括号内的操作。表达式“(3 + 4)* 2”表示“加3和4然后将结果乘以2.”表达式“3 +(4 * 2)”表示“乘以4和2,然后将3加到结果中“。
与其他现代编程语言一样,您无需执行任何特殊操作即可确保计算结果正确表示为整数或浮点数。如果两个整数不均匀分配,则将一个整数除以另一个整数会产生浮点结果。类似地,如果对整数进行某些操作,使其大于允许的最大整数或小于最小可能整数,则PHP引擎会将结果转换为浮点数,以便您获得正确的计算结果。
1 2 3 4 | $plates = 5; $dinner = 'Beef Chow-Fun'; $cost_of_dinner = 8.95; $cost_of_lunch = $cost_of_dinner; |
1 2 3 4 5 6 7 8 9 10 11 | $page_header = <<<HTML_HEADER <html> <head><title>Menu</title></head> <body bgcolor="#fffed9"> <h1>Dinner</h1> HTML_HEADER; $page_footer = <<<HTML_FOOTER </body> </html> HTML_FOOTER; |
- 大写或小写基本拉丁字母(
A-Z
和a-z
) - 数字(
0-9
) - 下划线(
_
) - 任何非基本拉丁字符(如
ç
或或),如果您为程序文件使用UTF-8等字符编码
此外,变量名的第一个字符不允许是数字。表2-2 列出了一些允许的变量名称。
$size |
$drinkSize |
$SUPER_BIG_DRINK |
$_d_r_i_n_k_y |
$drink4you2 |
$напиток |
$သောက်စရာ |
$????? |
$? |
请记住,尽管变量名称中带有表情符号具有诱人的美学可能性,但大多数PHP代码都带有数字,下划线和基本拉丁字母。
表2-3列出了一些不允许的变量名称以及它们的错误。
表2-3。不允许使用变量名称
变量名称区分大小写。这意味着,变量命名$dinner
, $Dinner
和$DINNER
单独的不同,在共同的不超过,如果他们被命名为 $breakfast
,$lunch
和 $supper
。实际上,您应该避免使用仅以字母大小写不同的变量名称。它们使程序难以阅读和调试。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $price = 3.95; $tax_rate = 0.08; $tax_amount = $price * $tax_rate; $total_cost = $price + $tax_amount; $username = 'james'; $domain = '@example.com'; $email_address = $username . $domain; print 'The tax is ' . $tax_amount; print "\n"; // this prints a line break print 'The total cost is ' .$total_cost; print "\n"; // this prints a line break print $email_address; |
例2-17打印:
1 2 3 | The tax is 0.316 The total cost is 4.266 james@example.com |
赋值运算符可以与算术运算符和字符串运算符组合,以便以简洁的方式修改值。操作者随后等号装置“这个操作符应用到变量”。实施例2-18示出了两个相同的方式来添加3 到$price
。
例2-18。合并分配和添加
1 2 3 4 | // Add 3 the regular way $price = $price + 3; // Add 3 with the combined operator $price += 3; |
组合赋值运算符使用字符串连接运算符将值附加到字符串。例2-19显示了为字符串添加后缀的两种相同方法。组合运算符的优点是它们更简洁。
例2-19。组合分配和连接
1 2 3 4 5 6 7 | $username = 'james'; $domain = '@example.com'; // Concatenate $domain to the end of $username the regular way $username = $username . $domain; // Concatenate with the combined operator $username .= $domain; |
将变量递增和递减1非常常见,以至于这些操作都有自己的运算符。的++
操作者加1的变量,并且所述--
操作者中减去1。这些运算符通常用于for()
循环,详见第3章。但是你可以在任何带有数字的变量上使用它们,如例2-20所示。
例2-20。递增和递减
1 2 3 4 5 6 7 8 9 | // Add 1 to $birthday $birthday = $birthday + 1; // Add another 1 to $birthday ++$birthday; // Subtract 1 from $years_left $years_left = $years_left - 1; // Subtract another 1 from $years_left --$years_left; |
将变量放入字符串中
通常,您可以打印与其他文本组合的变量值,例如显示HTML时 单元格中具有计算值的表格或用于在标准化HTML模板中显示特定用户信息的用户配置文件页面。双引号字符串,在这里有文件,使这个简单的属性:可以 插值变量放进去。这意味着如果字符串包含变量名称,则变量名称将替换为变量的值。在例2-21中,值$email
被内插到打印的字符串中。
例2-21。可变插值
1 2 | $email = 'jacob@example.com'; print "Send replies to: $email"; |
例2-21打印:
1 | Send replies to: jacob@example.com |
这里的文件特别多 用于将许多变量插入到长HTML块中,如例2-22所示。
例2-22。插入这里的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $page_title = 'Menu'; $meat = 'pork'; $vegetable = 'bean sprout'; print <<<MENU <html> <head><title>$page_title</title></head> <body> <ul> <li> Barbecued $meat <li> Sliced $meat <li> Braised $meat with $vegetable </ul> </body> </html> MENU; |
例2-22打印:
1 2 3 4 5 6 7 8 9 10 | <html> <head><title>Menu</title></head> <body> <ul> <li> Barbecued pork <li> Sliced pork <li> Braised pork with bean sprout </ul> </body> </html> |
当您将变量插入到PHP引擎可能与变量名称混淆的地方的字符串中时,用花括号括起变量 消除混乱。 例2-23需要花括号,以便 $preparation
正确插值。
例2-23。插入花括号
1 2 3 | $preparation = 'Braise'; $meat = 'Beef'; print "{$preparation}d $meat with Vegetables"; |
例2-23打印:
1 | Braised Beef with Vegetables |
如果没有花括号,示例2-23中的print
语句将是 “ 。在该语句中,看起来像要插入的变量被命名 。花括号是指示变量名称停止的位置和文字字符串开始的必要条件。括号语法对于插入更复杂的表达式和数组值也很有用,将在第4章中讨论。print
$preparationd $meat with Vegetables";
$preparationd
章节总结
本章包括:
- 以三种不同的方式在程序中定义字符串:使用单引号,使用双引号,以及作为here文档
- 转义:它是什么以及在每种字符串中需要转义哪些字符
- 通过检查字符串的长度,从中删除前导和尾随空格,或将其与另一个字符串进行比较来验证字符串
- 使用格式化字符串
printf()
- 与操纵字符串的情况下
strtolower()
,strtoupper()
或ucwords()
- 选择字符串的一部分
substr()
- 改变字符串的一部分
str_replace()
- 在程序中定义数字
- 用数字做数学
- 将值存储在变量中
- 适当地命名变量
- 使用组合运算符和变量
- 使用带变量的递增和递减运算符
- 在字符串中插入变量
演习
- 在这个PHP程序中找到错误:
1234<? phpprint 'How are you?';print 'I'm fine.';?>
- 写一个PHP程序,计算这顿餐厅的总费用:两个汉堡包每个4.95美元,一个巧克力奶昔1.95美元,一个可乐85美分。销售税税率为7.5%,您的税前利润为16%。
- 将您的解决方案修改为上一个练习,以打印格式化的帐单。对于餐中的每个项目,打印价格,数量和总成本。打印税前食品和饮料总额,税后总额,以及含税和小费的总额。确保输出中的价格垂直对齐。
- 编写一个PHP程序,将变量设置
$first_name
为您的名字和$last_name
姓氏。打印出一个字符串,其中包含以空格分隔的名字和姓氏。同时打印出该字符串的长度。 - 编写一个PHP程序,使用increment运算符(
++
)和组合乘法运算符(*=
)打印出1到5之间的数字,以及从2(2 1)到32(2 5)的2的幂。 - 为您为其他练习编写的PHP程序添加注释。尝试单行和多行注释。添加注释后,运行程序以确保它们正常工作且注释语法正确。