第2章数据:使用文本和数字

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程序中的字符串。最简单的是用单引号括起字符串:

于字符串由单引号内的所有内容组成,因此打印的内容如下:

请注意,这四个print语句的输出全部出现在一行上。没有添加换行符 print1

单引号不是字符串的一部分。它们是分隔符,它告诉PHP引擎字符串的开头和结尾。如果要在用单引号括起来的字符串中包含单引号,请\在单引号内放一个反斜杠()字符串:

\'序列变成'里面的字符串,那么什么是印刷是:

反斜杠告诉PHP引擎将以下字符视为文字单引号而不是单引号,这意味着“字符串结束。”这称为 转义,反斜杠称为转义字符。转义字符告诉系统对其后面的字符执行特殊操作。在单引号字符串中,单引号通常表示“字符串结尾”。在带有反斜杠的单引号之前,将其含义更改为文字单引号字符。

转义字符本身可以被转义。包含文字反斜杠字符在字符串中,在它前面加一个反斜杠:

这打印:

第一个反斜杠是转义字符:它告诉PHP引擎下一个字符发生了不同的事情。这会影响第二个反斜杠:而不是特殊操作(“按字面意思处理下一个字符”),字符串中包含一个文字反斜杠。

请注意,这些是从左上角到右下角的反斜杠,而不是从左下角到右上角的向前滑动。请记住,PHP程序(//)中的两个正斜杠表示注释。

您可以在单引号字符串中包含空格,例如换行符:

这将HTML放在多行:

由于标记字符串结尾的单引号紧跟在字符串结尾之后</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。这里的文件

例2-1中,分隔符字是 HTMLBLOCK。这里的文档分隔符可以包含字母,数字和下划线字符。分隔符的第一个字符必须是字母或下划线。最好将此处文档分隔符中的所有字母设为大写,以便在视觉上设置此处的文档。结束此处文档的分隔符必须单独在其行上。分隔符不能缩进,并且后面不允许使用空格,注释或其他字符。唯一的例外是在分隔符后立即允许分号结束语句。在这种情况下,分号后不能在同一行上。例2-2中的代码 遵循这些规则进行打印这是一份文件。

例2-2。打印此处文档

这里的文档遵循相同的转义字符和变量替换规则作为双引号字符串。这使得它们在您想要定义或打印包含大量文本或包含大量变量的HTML的字符串时特别有用。稍后在本章的后面,示例2-22演示了这一点。

要结合两个字符串,使用.(句号),字符串 连接运算符。以下是一些组合字符串:

组合字符串打印为:

操纵文本

PHP有许多内置函数,在处理字符串时很有用。本节介绍对两个常见任务最有帮助的功能:验证和格式化。在线PHP手册的“字符串”章节提供了有关其他内置字符串处理函数的信息。

验证字符串

验证是检查来自外部源的输入是否符合预期格式或含义的过程。它确保用户确实在相应位置的表单或合理电子邮件地址的“邮政编码”框中输入了邮政编码。第7章深入研究了表单处理的所有方面,但由于提交的表单数据是作为字符串提供给PHP程序的,因此本节讨论如何验证这些字符串。

trim()功能删除 从字符串的开头和结尾开始的空格。结合strlen(),告诉你字符串的长度,您可以使用此函数来查找提交值的长度,同时忽略任何前导或尾随空格。例2-3显示了如何操作。(第3章更详细地讨论if()例2-3中使用的语句。)

例2-3。检查修剪过的弦的长度

使用trim()保护来防止输入732两个空格的邮政编码的人。有时额外的空间是偶然的,有时它们是恶意的。无论是什么原因,在适当的时候扔掉它们以确保你得到你关心的弦长。

你可以连续的调用trim(),并 strlen()为更简洁的代码。实施例2-4实施例2-3的相同之处

例2-4。简洁地检查修剪过的绳子的长度

例2-4的第一行中发生了四件事。首先,将变量的值$_POST['zipcode'] 传递给trim()函数。其次,该函数的返回值 – $_POST['zipcode']删除了前导和尾随空格 – 被传递给strlen()函数,然后该函数返回修剪后的字符串的长度。第三,将这个长度与之比较5。最后,如果长度不等于5print里面的语句if()块运行。

比较 两个字符串,使用等于operator(==),如例2-5所示。

例2-5。比较字符串与相等的运算符

例2-5中的print语句仅在以下情况下运行提交的表单参数 email是全小写 president@whitehouse.gov。在比较字符串时==,案例很重要。字符串president@whitehouse.GOV与 President@Whitehouse.Govor不同 president@whitehouse.gov

要比较字符串而不注意案例,请使用strcasecmp()。 它比较两个字符串,同时忽略大小写的差异。如果您提供的两个字符串strcasecmp()相同,独立于大写和小写字母之间的任何差异,则返回 0例2-6 显示了如何使用strcasecmp()

例2-6。不区分大小写地比较字符串

print陈述实施例2-6所提交的形式参数运行email President@Whitehouse.GovPRESIDENT@WHITEHOUSE.GOVpresIDENT@whiteHOUSE.GoV,或的任何其他资本president@whitehouse.gov

格式化文本

printf()功能使您可以更好地控制(比较print)输出的外观。您传递printf()格式字符串和一堆要打印的项目。格式字符串中的每个规则都替换为一个项目。例2-7 显示printf() 了实际操作。

例2-7。使用printf()格式化价格

这打印:

例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()进行零填充

例2-8打印:

符号修饰符有助于明确指示正值和负值。例2-9用它来显示一些温度。

例2-9。用printf()显示标志

例2-9打印:

要了解其他printf()格式规则,请访问 http://www.php.net/sprintf

另一种文本格式是 操纵字符串的情况。功能strtolower()和 strtoupper()制作分别为字符串的全小写和全大写版本。例2-10显示strtolower()strtoupper() 在工作。

例2-10。改变案例

例2-10打印:

ucwords()函数将字符串中每个单词的首字母大写。strtolower()当这些名称以全部大写形式提供给您时,这与组合使用时非常有用。例2-11显示了如何组合strtolower()ucwords()

例2-11。使用ucwords()对名称进行优化

例2-11打印:

有了这个 substr() 功能,你只能提取一部分字符串。例如,您可能只想在摘要页面上显示消息的开头。示例2-12显示了如何使用substr() 截断提交的表单参数comments

例2-12。使用substr()截断字符串

如果提交的表单参数comments是:

例2-12打印:

三个参数substr()是要使用的字符串,要提取的子字符串的起始位置以及要提取的字节数。字符串的开头是位置0,而不是1,所以substr($_POST['comments'], 0, 30)意味着“从$_POST['comments']字符串的开头开始提取30个字节 ”。

当您substr()为起始位置给出负数时,它会从字符串的末尾开始计算,以确定从哪里开始。起始位置-4表示“从结尾开始四个字节。” 示例2-13使用负起始位置仅显示信用卡号的最后四位数字。

例2-13。用substr()提取字符串的结尾

如果提交的表单参数card是 4000-1234-5678-9101,则示例2-13 打印:

作为捷径,请使用substr($_POST['card'],-4) 而不是substr($_POST['card'], -4,4)。当你省略最后一个参数时,substr()返回从起始位置(无论是正数还是负数)到字符串结尾的所有内容。

str_replace() 函数不是提取子字符串,而是更改字符串的一部分。它查找子字符串并用新字符串替换子字符串。这对于简单的基于模板的HTML自定义很有用。例2-14 用于str_replace()设置 标签的class属性<span>

例2-14。使用str_replace()

如果$my_class已设置为lunch,则 示例2-14打印:

{class}(第一个参数to str_replace())的每个实例都被作为传递给的第三个参数的字符串中 的lunch(值)替换 。$my_classstr_replace()

数字

PHP中的数字用熟悉的表示法表示,虽然您不能使用逗号或任何其他字符来分组数千。与整数相比,使用带小数部分的数字不需要做任何特殊操作。例2-15在PHP中打印一些有效数字。

例2-15。数字

使用不同种类的数字

在内部,PHP引擎 区分具有小数部分的数字和不具有小数部分的数字。前者称为浮点数,后者称为 浮点数被称为整数。浮点数的名称取自小数点可以“浮动”以表示不同精度的事实。

PHP引擎使用操作系统的数学工具来表示数字,因此您可以使用的最大和最小数字以及浮点数中可以包含的小数位数在不同系统上有所不同。

PHP引擎的整数内部表示与浮点数之间的区别在于它们的存储方式的准确性。整数47精确存储47.浮点数46.3可以存储为46.2999999。这会影响如何比较数字的正确技巧。“构建复杂决策”解释了比较并展示了如何正确比较浮点数。

算术运算符

用PHP做数学 很像 在小学做数学,除了它快得多。例2-16显示了数字之间的一些基本操作。

例2-16。数学运算

例2-16的输出是:

除了加号sign(+)添加,-用于减法的减号(),用于除法的正斜杠(/), 和asterisk(*)用于乘法,PHP还支持两个星号(**)用于取幂%模数的百分号() 除法(返回除法运算的剩余部分):

这打印:

由于17除以3是5,余数为2,17%3等于2.模数运算符对于打印CSS类名在HTML表中交替的行非常有用,如例4-13所示。

警告

指数运算符是在PHP 5.6中引入的。如果您使用的是旧版本的PHP,请使用该pow()功能。

算术运算符,以及其他算术运算符 您将在本书后面讨论的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引擎会将结果转换为浮点数,以便您获得正确的计算结果。

变量

变量保存程序操作的数据运行时,例如您从数据库加载的用户信息或已键入HTML表单的条目。在PHP中,变量用a表示,$后跟变量的名称。分配一个值变量,使用等号(=)。这称为赋值运算符

这里有一些例子:

作业适用 这里的文件也是:

变量名称可以 仅包括:

  • 大写或小写基本拉丁字母(A-Za-z
  • 数字(0-9
  • 下划线(_
  • 任何非基本拉丁字符(如ç),如果您为程序文件使用UTF-8等字符编码

此外,变量名的第一个字符不允许是数字。表2-2 列出了一些允许的变量名称。

表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。实际上,您应该避免使用仅以字母大小写不同的变量名称。它们使程序难以阅读和调试。

在变量上运行

算术和字符串运算符处理包含数字或字符串的变量就像他们对字面数字或字符串一样。例2-17显示了一些数学运算 和变量的字符串操作。

例2-17。对变量进行操作

例2-17打印:

赋值运算符可以与算术运算符和字符串运算符组合,以便以简洁的方式修改值。操作者随后等号装置“这个操作符应用到变量”。实施例2-18示出了两个相同的方式来添加3 $price

例2-18。合并分配和添加

 

组合赋值运算符使用字符串连接运算符将值附加到字符串。例2-19显示了为字符串添加后缀的两种相同方法。组合运算符的优点是它们更简洁。

例2-19。组合分配和连接

将变量递增和递减1非常常见,以至于这些操作都有自己的运算符。++ 操作者加1的变量,并且所述--操作者中减去1。这些运算符通常用于for()循环,详见第3章。但是你可以在任何带有数字的变量上使用它们,如例2-20所示。

例2-20。递增和递减

将变量放入字符串中

通常,您可以打印与其他文本组合的变量值,例如显示HTML时 单元格中具有计算值的表格或用于在标准化HTML模板中显示特定用户信息的用户配置文件页面。双引号字符串,在这里有文件,使这个简单的属性:可以 插值变量放进去。这意味着如果字符串包含变量名称,则变量名称将替换为变量的值。在例2-21中,值$email被内插到打印的字符串中。

例2-21。可变插值

例2-21打印:

这里的文件特别多 用于将许多变量插入到长HTML块中,如例2-22所示。

例2-22。插入这里的文件

例2-22打印:

当您将变量插入到PHP引擎可能与变量名称混淆的地方的字符串中时,用花括号括起变量 消除混乱。 例2-23需要花括号,以便 $preparation正确插值。

例2-23。插入花括号

例2-23打印:

如果没有花括号,示例2-23中的print语句将是 “ 。在该语句中,看起来像要插入的变量被命名 。花括号是指示变量名称停止的位置和文字字符串开始的必要条件。括号语法对于插入更复杂的表达式和数组值也很有用,将在第4章中讨论。print$preparationd $meat with Vegetables";$preparationd

章节总结

本章包括:

  • 以三种不同的方式在程序中定义字符串:使用单引号,使用双引号,以及作为here文档
  • 转义:它是什么以及在每种字符串中需要转义哪些字符
  • 通过检查字符串的长度,从中删除前导和尾随空格,或将其与另一个字符串进行比较来验证字符串
  • 使用格式化字符串 printf()
  • 与操纵字符串的情况下strtolower()strtoupper()ucwords()
  • 选择字符串的一部分 substr()
  • 改变字符串的一部分 str_replace()
  • 在程序中定义数字
  • 用数字做数学
  • 将值存储在变量中
  • 适当地命名变量
  • 使用组合运算符和变量
  • 使用带变量的递增和递减运算符
  • 在字符串中插入变量

演习

  1. 在这个PHP程序中找到错误:


     
  2. 写一个PHP程序,计算这顿餐厅的总费用:两个汉堡包每个4.95美元,一个巧克力奶昔1.95美元,一个可乐85美分。销售税税率为7.5%,您的税前利润为16%。
  3. 将您的解决方案修改为上一个练习,以打印格式化的帐单。对于餐中的每个项目,打印价格,数量和总成本。打印税前食品和饮料总额,税后总额,以及含税和小费的总额。确保输出中的价格垂直对齐。
  4. 编写一个PHP程序,将变量设置 $first_name为您的名字和 $last_name姓氏。打印出一个字符串,其中包含以空格分隔的名字和姓氏。同时打印出该字符串的长度。
  5. 编写一个PHP程序,使用increment运算符(++)和组合乘法运算符(*=)打印出1到5之间的数字,以及从2(2 1)到32(2 5)的2的幂。
  6. 为您为其他练习编写的PHP程序添加注释。尝试单行和多行注释。添加注释后,运行程序以确保它们正常工作且注释语法正确。

 

如果有不懂的地方请留言,SKY8G网站编辑者专注于研究IT源代码研究与开发。希望你下次光临,你的认可和留言是对我们最大的支持,谢谢!

上一篇: 第1章定位和第一步

下一篇: Magento 客户组layout handle

登录 评论
avatar