《PHP与MySQL动态网站开发》试读:第1章:PHP概述

  本章内容 基本语法 发送数据到Web浏览器 编写注释 什么是变量 介绍字符串 连接字符串 介绍数字 介绍常量 单引号与双引号 基本的调试步骤 回顾和实践   尽 管本书重点关注的是组合使用MySQL和PHP,但是你将单独使用PHP执行动态Web站点的大量基础工作。在本章和下一章中,将学习PHP的基础知识,从语法到变量、运算符和语言构造(条件构造、循环构造等等)。在你学习这些基础知识的同时,还将开始开发有用的代码,在本书后面将把这些代码集成到更大的应用程序中。   在这一章中,我将泛泛地介绍PHP Web脚本语言的大多数基础知识。你将学习到PHP编码的语法,如何发送数据给Web浏览器,以及如何使用两类变量(字符串和数字)和常量。有些示例看起来似乎没太大用处,但是,它们将说明一些必须掌握的概念,有了这些,你才能编写更高级的脚本。 1.1 基本语法   如同我在本书的前言中所提及的,PHP是一种嵌入在HTML中的(HTML-embedded)脚本语言。这意味着可以把PHP代码和HTML代码混合在相同的文件内。我们的PHP编程首先从一个简单的Web页面开始。脚本1-1给出了一个最简单的XHTML过渡型文档[ XHTML标准定义了三种文档:严格型、过渡型和框架型。——编者注]的示例,我将把它用作本书中每个Web页面的基础(本书没有正式讨论[X]HTML,参见专门讨论这个主题的资源以了解更多信息)。 脚本1-1 基本XHTML 1.0过渡型Web文档 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>Page Title</title> 6 </head> 7 <body> 8 <!-- Script 1.1 - template.html --> 9 </body> 10 </html>   要把PHP代码添加到页面中,可把它置于PHP标签内: <?php ?>   放置在这些标签内的任何内容都会被Web服务器视作PHP代码(这意味着PHP解释器将处理这些代码)。PHP标签外的任何文本会立即作为常规HTML发送给Web浏览器。(由于PHP通常用来创建Web浏览器中显示的内容,因此PHP标签通常放在页面body中的某个地方。)   除了把PHP代码置于PHP标签内之外,PHP文件还必须使用正确的扩展名。扩展名告诉服务器以特殊的方式(即作为PHP页面)处理脚本。大多数Web服务器都为标准HTML页面使用.html或.htm扩展名,通常PHP文件首选扩展名为.php。   在开始之前,你必须已经有一个可用的PHP安装!在完成附录A“安装”之后,它会在你的托管网站或者你自己的机器上,附录A可以在http://www.peachpit.com免费下载。 理解字符编码   字符编码是一项极为复杂的主题,但当前最需要理解的是:在某文件中所使用的字符编码指示文件将显示什么字符(因此也同时指明了可以使用哪种语言)。在选择一种字符编码之前,必须首先确定所使用的文本编辑器或IDE(即创建HTML和PHP脚本的应用程序)能够使用哪种字符编码保存文档。一些应用程序可以让你在偏好设置或者选项中设置字符编码,而另外一些应用程序则只有当保存文件时才可设置字符编码。   可以利用相应的元标签为Web浏览器指示页面的字符编码:   <meta http-equiv="content-type" content="text/html; charset=utf-8" />   charset=utf-8这一部分表明使用的是UTF-8字符编码,这是8位Unicode转换格式(8-bit Unicode Transformation Format)的简写。Unicode是一种表示所有字母和符号的可靠方式 。在撰写本书时,第6版的Unicode能支持超过99 000个字符!   如果你想创建一个能适应多语种的Web页面,UTF-8正是解决之道,我将在本书的示例中使用它。当然你没有必要非得这么做。但是无论使用何种编码,请一定要确保XHTML页面所指定的编码与文本编辑器或IDE的编码设置一致,否则你可能会在浏览页面时看到一些奇怪的字符。 HTML5   在撰写本书时,HTML未来的主要版本——HTML5——还在积极地开发与讨论中,还未最后定案,因此本书这一版中没有选用它。事实上,如果HTML5在我开始编写本书的第5版时仍然未能发布,我也不会感到惊讶。要想让大部分浏览器接受它还需要相当长的一段时间。尽管如此,但HTML5仍可视为未来发展的一个热点,所以本书将会偶尔介绍一些有望被浏览器逐渐引入并支持的HTML5功能。 建立基本的PHP脚本   (1) 在文本编辑器或集成开发环境中创建一个新文档,命名为first.php(参见脚本1-2)。 脚本1-2 第一个PHP脚本本身不做任何事情,但是足以说明如何编写PHP脚本。在开始涉及更复杂的PHP代码之前,它还可用作测试 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>Basic PHP Page</title> 6 </head> 7 <body> 8 <!-- Script 1.2 - first.php --> 9 <p>This is standard HTML.</p> 10 <?php 11 ?> 12 </body> 13 </html>   一般可以任意选择用什么文本编辑器或集成开发环境,它可以是Dreamweaver(一种优良的IDE)、BBEdit(一种优秀的、流行的Macintosh纯文本编辑器)或vi(一种纯文本UNIX编辑器,缺少图形界面)。然而,使用有些文本编辑器和IDE输入和调试HTML和PHP代码会更容易(与之相反,Windows上的“记事本”会使编码更困难)。如果你还没有找到自己喜欢的应用程序,可搜索Web或者使用本书的配套论坛(www.LarryUllman.com/forums)找到一个。   (2) 开始编写基本的HTML文档。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/ xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Basic PHP Page</title> </head> <body> <!-- Script 1.2 - first.php --> <p>This is standard HTML.</p> </body> </html>   尽管这是我在整本书中使用的语法,但是,你可以更改HTML以匹配你打算使用的任何一种标准(例如,HTML 4.0严格型)。同样,如果你不熟悉这段HTML代码,可以查看专门的(X)HTML资源(参见第一个提示)。   (3) 在body结束标签之前,插入PHP标签。 <?php ?>   这些是正式的PHP标签,也称为XML风格的标签。尽管PHP支持其他标签类型,我还是建议你使用正式的PHP标签,并且在整本书中我也会这样做。   (4) 将文件另存为first.php。   记住,如果没有使用合适的PHP扩展名保存文件,该脚本将不会正确执行。(不使用记事本创建PHP文件的原因这一就是,它会默默地给文件加上.txt后缀,从而导致很多头痛的问题。)   (5) 将该文件置于Web服务器上正确的目录中。   如果你在自己的计算机上运行PHP(假定在遵照本书附录A中的安装指导进行了安装之后),你只需要将文件移动、复制或保存到计算机上的特定文件夹中。如果你还不知道该目录是什么,可以查看所用Web服务器应用程序的文档,以找到该目录。   如果在托管服务器上(即在远程计算机上)运行PHP,就需要使用FTP应用程序将文件上传到正确的目录中。你的托管公司将给你提供访问权限及其他必要的信息。   (6) 在Web浏览器中运行first.php(参见图1-1)。 图1-1 虽然它看起来像任何其他(简单的)HTML页面一样,事实上,这是一个PHP脚本,它是本书中其余示例的基础   由于PHP脚本需要由服务器解析,你肯定必须通过URL访问PHP脚本(如浏览器中的地址必须以http://开头)。你不能像在其他应用程序中打开一个文件那样在Web浏览器中简单地打开它们(比如以file://或c:\等开头的地址)。   如果在自己的计算机上运行PHP,将需要到达http://localhost/first.phphttp://127.0.0.1/first.phphttp://localhost/~<user>/first.php(在Mac OS X上,为<user>使用实际的用户名)。如果正在使用一台Web主机,那么需要使用http://你的域名/first.php(例如,http://www.example.com/first.php)。   (7) 如果没有看到如图1-1所示的结果,可以开始进行调试。   学习任何编程语言的一个必不可少的部分是掌握调试方法。它是一个有时非常痛苦却绝对必要的过程。对于第一个示例,如果你没有看到一个简单但完全有效的Web页面,可遵循以下步骤:   (1) 确认你正确安装了PHP(参见本书附录A,了解测试指导)。   (2) 确保你正在通过URL运行脚本。Web浏览器中的地址必须以http://开始。如果它以file://开始,就会出现问题(参见图1-2)。 图1-2 PHP代码只能通过http://运行(否则这个特定脚本就不会起作用)   (3) 如果得到一个未找到文件(或类似)的错误,很可能是把文件放在错误的目录中或者输入了错误的文件名(在保存它时或者在Web浏览器中)。   如果你执行了所有这些步骤但是仍然有问题,可以求助于本书相应的论坛(www.LarryUllman. com/forums/)。    提示 有关HTML和XHTML的详细信息,可以查看Elizabeth Castro写的好书《HTML XHTML CSS基础教程(第7版)》(人民邮电出版社)或者搜索Web。 你可以在一个HTML文档中嵌入PHP代码的多个部分(即可以在两种语言之间来回转换)。在整本书中都可以看到这样的示例。 在UTF-8之前,最常用的字符编码之一是ISO-8859-1。它可以显示几乎全部西欧语言。目前,很多Web浏览器和其他应用仍在使用它作为默认字符编码。 你可以通过在文件首行添加@charset "utf-8"来为外部的CSS文件声明字符编码;如果用的不是UTF-8,那就将其改为相应的字符编码。 1.2 发送数据到Web浏览器   要利用PHP构建动态Web站点,必须知道如何发送数据到Web浏览器。PHP具有许多用于此目的的内置函数,其中最常用的是echo和print。我个人倾向于使用echo: echo 'Hello, world!'; echo "What's new?";   如果喜欢的话,可以代之以print(): print 'Hello, world!'; print "What's new?";   从这些示例可以看出,可以使用单引号或双引号(但是这两种引号之间有区别,到本章末尾就可以清楚看出它们之间的区别)。函数名后面的第一个引号指示要打印的消息的开头。下一个匹配的引号(即与左引号相同类型的右引号)指示要打印的消息的末尾。   除了学习如何发送数据到Web浏览器之外,还要注意在PHP中,所有语句(用外行的话讲就是一行执行代码)都必须以分号结尾。此外,在涉及函数名时PHP是不区分大小写的,因此ECHO、echo和eCHo等都会工作。当然,所有小写版本更容易输入。   发送数据到Web浏览器   (1) 在文本编辑器或IDE中打开first.php(参见脚本1-2)。   (2) 在PHP标签(第10行和第11行)之间添加一条简单的消息(参见脚本1-3)。 脚本1-3 PHP可以使用print或echo发送数据到Web浏览器 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>Using Echo</title> 6 </head> 7 <body> 8 <!-- Script 1.3 - second.php --> 9 <p>This is standard HTML.</p> 10 <?php 11 echo 'This was generated using PHP!'; 12 ?> 13 </body> 14 </html>   在此,对于你在这里输入的消息内容,使用的是哪个函数(echo或print)或者哪种引号,都是无关紧要的——只是在打印单引号或双引号作为消息的一部分时,要小心谨慎(参见框注“需要转义”)。 需要转义   你可能已经发现,发送数据到Web比较复杂的一个地方是打印单引号和双引号。下面两种方式都会引发错误:   echo "She said, "How are you?"";   echo 'I'm just ducky.';   对于这个问题有两种解决方案。首先,在打印双引号时使用单引号,反之亦然:   echo 'She said, "How are you?"';   echo "I'm just ducky.";   或者,通过在有问题的字符前面放置一个反斜杠,对它进行转义:   echo "She said, \"How are you?\"";   print 'I\'m just ducky.';   转义的引号只会像任何其他字符一样打印。理解如何使用反斜杠对字符进行转义是一个重要的概念,我将在本章末尾更深入地介绍这个概念。   (3) 你可以按自己的想法更改页面标题,以便更好地描述这个页面(第5行)。 <title>Using Echo</title>   这种改变只会影响浏览器窗口的标题栏。   (4) 将文件另存为second.php,存放在Web目录中,然后在Web浏览器中测试它(参见图1-3)。 图1-3 结果仍然不怎么迷人,但是这个页面有一部分是PHP动态生成的   注意,所有PHP脚本都必须通过URL(http://something)执行!   (5) 如果必要,可调试脚本。   如果你看到的是解析错误,而不是你的消息(参见图1-4),请检查你是否同时具有左引号和右引号,以及对任何有问题的字符转义(参见框注“需要转义”)。还要肯定每一条语句都用分号结尾。 图1-4 这可能是PHP程序员看到的许多解析错误中的第一个错误(这个错误是由未转义的引号引起的)   如果看到的是完全空白的页面,这可能是由于下面两个原因之一引起的。 HTML代码有问题。通过查看页面的源文件来测试它,并寻找其中的HTML问题(参见图1-5)。 图1-5 看到空白PHP页面的一个常见原因是简单的HTML错误,如这里的结束title标签(少了斜杠) 发生一个错误,但是你的PHP配置中关闭了display_errors,因此,不会显示任何内容。在这种情况下,参见本书附录A中关于如何配置PHP一节的内容,以便能够再打开display_errors。    提示 严格说来,echo和print是语言构造,而不是函数。顺便说一下,当我为了方便而继续称之为“函数”时,不要感到奇怪。此外,在指函数时,我用了一对括号(比如number_format(),而不仅仅是number_format),从而有助于把它们与变量以及PHP的其他部分区分开。这只是我自己的一个小小习惯。 你通常也可以使用echo和print发送HTML代码到Web浏览器,其方法如下(参见图1-6)。   echo '<p>Hello, <b>world</b>!</p>'; 图1-6 PHP可以发送HTML代码(带有类似于这里的格式)以及简单的文本(参见图1-3)到Web浏览器 echo和print都可用于打印多行文本:   echo 'This sentence is   printed over two lines.'; 在这里所发生的事情是:回车符(通过按Enter键或Return键创建)将变成打印消息的一部分,它终止于闭合单引号。其实际效果将是在HTML源代码中“打印”回车符(参见图1-7)。这不会影响生成的页面(参见图1-8)。有关这方面的更多信息,参见框注“理解空白”。 图1-7 PHP源代码中的多行文本和HTML也会产生多行HTML源代码。注意:HTML中无关紧要的空白不会影响页面的外观(参见图1-8),但是可能使源文件更易于查阅 图1-8 HTML源代码中的回车符(参见图1-7)不会影响呈现的结果。改变显示的Web页面间距的唯一方式是使用HTML标签(如<br/>和<p></p>) 理解空白   利用PHP,可以发送数据(像HTML标签和文本)到Web浏览器。接下来,Web浏览器可以将其显示为最终用户查看的Web页面。因此,使用PHP其实就是在创建Web页面的HTML源文件(HTML source)。记住这一点,实质上可以在3个地方产生引人注目的空白(white space)(额外的空格、制表位以及空白行):在PHP脚本中、在HTML源文件中以及在呈现的Web页面中。   PHP一般会忽略空白,这意味着你可以在代码中增加空白,使自己的脚本更易读。HTML一般也会忽略空白。确切地讲,HTML中会影响页面的唯一空白是单个空格(多个空格仍然作为一个空格呈现)。如果HTML源文件中有多行的文本,这并不意味着在呈现的页面中它将出现在多行上(参见图1-7和图1-8)。   要改变呈现的Web页面的间距,可以使用HTML标签<br/>(换行符,在HTML老标准中是<br>)和<p></p>(段落)。要改变用PHP创建的HTML源文件的间距,可以:    在多个行上使用echo()或print();   或者    在双引号内打印换行符(\n)。 1.3 编写注释   创建可执行的PHP代码只是编程过程的一部分(诚然,它是最重要的部分)。动态Web站点开发的一个次要但仍然至关重要的工作是为你的代码加注释。实际上,当被问及新手程序员与老头的区别时,我的回答始终是能否写出好的、详尽的注释。   在HTML中,可以使用特殊标签添加注释: <!-- Comment goes here. -->   HTML注释在源文件中可以看到,但是不会出现在呈现的页面中(参见图1-7和图1-8)。   PHP注释则有所不同,因为它们根本不会被发送到Web浏览器,这意味着最终用户不会看到它们,即使查看HTML源文件也是如此。   PHP支持3种注释类型。第一种使用磅即编号符号(#)。 # This is a comment.   第二种使用两个斜杠。 // This is also a comment.   这两种注释都会使PHP忽略其后直到行末(当你按Return或Enter键时)的一切内容。因此,这两种注释都只是单行注释。它们还常用于在PHP代码行内添加注释。 print 'Hello!'; // Say hello.   第三种风格允许注释分布在多行上。 /* This is a longer comment that spans two lines. */   给脚本加注释   (1) 在文本编辑器或IDE中新建一个PHP文档,命名为comments.php(参见脚本1-4)。 脚本1-4 这些基本的注释演示了在PHP中可以使用的3种语法 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>Comments</title> 6 </head> 7 <body> 8 <?php 9 10 # Script 1.4 - comments.php 11 # Created March 16, 2011 12 # Created by Larry E. Ullman 13 # This script does nothing much. 14 15 echo '<p>This is a line of text.<br /> This is another line of text.</p>'; 16 17 /* 18 echo 'This line will not be executed.'; 19 */ 20 21 echo "<p>Now I'm done.</p>"; // End of PHP code. 22 23 ?> 24 </body> 25 </html>   (2) 添加初始PHP标签,并且编写你的第一条注释。 <?php # Script 1.4 - comments.php # Created March 16, 2011 # Created by Larry E. Ullman # This script does nothing much.   每个脚本都应该包含的最初几条注释之一是一个介绍性的块,其中列出了创建日期、修改日期、创建者、创建者的联系信息、脚本的目的,等等。有些人认为shell风格的注释(#)在脚本中更醒目,因此这种注释是最佳的。   (3) 将一些HTML代码发送到Web浏览器。 echo '<p>This is a line of text.<br />This is another line of text.</p>';   它与你在这里做什么无关,而只是让Web浏览器显示一些内容。出于改变显示内容的目的,我使用echo()语句打印一些HTML标签,包括换行符(<br/>),在生成的HTML页面中添加一些间距。   (4) 使用多行注释来注释掉第二条echo语句。 /* echo 'This line will not be executed.'; */   用/*和*/来包围任何PHP代码块,可以使代码不起作用,而不必将其从脚本中删除。之后可通过删除注释标签,重新激活那部分PHP代码。   (5) 在最后一条echo语句后面添加最后一条注释。 echo "<p>Now I'm done.</p>"; // End of PHP code.   这条最后的(有些多余的)注释说明了如何把一条注释放在一行的末尾,这是一种常见的惯例。注意:我使用双引号包围消息,因为单引号会与撇号冲突(参见本章前面的框注“需要转义”)。   (6) 关闭PHP部分并完成HTML页面。 ?> </body> </html>   (7) 将该文件另存为comments.php,存放到Web目录中,然后在Web浏览器中测试它(参见图1-9)。 图1-9 脚本1-4中的PHP注释不会出现在Web页面或HTML源文件中(参见图1-10)   (8) 有好奇心的读者可以在Web浏览器中检查源代码,确认没有出现PHP注释(参见图1-10)。 图1-10 在客户端浏览器中查看脚本1-4中的PHP注释    提示 不应该嵌套多行注释(/* */)(把一条注释放在另一条注释内),因为这会引起问题。 在行末(比如,在函数调用后面)可以使用任何PHP注释: echo 'Howdy'; /* Say 'Howdy' */ 尽管也可以用/*和*/,但一般不这样做。 对脚本进行注释几乎可以说是多多益善。话虽如此,为了节省篇幅,本书中的脚本并没有按我建议的那样加足够的注释。 在修改脚本时保持注释是最新的和准确的也很重要。没有什么比注释说的是一套,而代码实际上做的是另一套更让人迷糊的了。 1.4 什么是变量   变量是用于临时存储值的容器。这些值可以是数字、文本,或者是复杂得多的数据。PHP具有8种变量。其中包括4种标量(单值)类型——布尔型(TRUE或FALSE)、整型、浮点型(小数)和字符串型(字符),两种非标量(多值)类型——数组和对象,以及资源(当与数据库交互时将看到它)和NULL(它是一种不具有任何值的特殊类型)。   不管创建什么类型,PHP中的所有变量都遵循某种特定的语法规则。 变量的名称——也称为它的标识符——必须以美元符号($)开头,例如,$name。 变量名称可以包含字母、数字和下划线的组合,例如,$my_report1。 美元符号之后的第一个字符必须是字母或下划线(不能是数字)。 PHP中的变量名称是区分大小写的。这是一个非常重要的规则。这意味着$name和$Name是截然不同的变量。   为了开始使用变量,我将利用几个预定义的变量,在运行PHP脚本时会自动设置它们的值。在深入介绍这个脚本之前,应该知道另外两件事情。第一,可以使用等于号(=)(也称为赋值运算符(assignment operator))给变量赋值。第二,无需引号即可打印变量: print $some_var;   或者可以在双引号内打印变量: print "Hello, $name";   但不能在单引号内打印变量: print 'Hello, $name'; // Won't work!   使用变量   (1) 在文本编辑器或IDE中创建新的PHP文档,命名为predefined.php(参见脚本1-5)。 脚本1-5 这个脚本会打印3个PHP预定义的变量 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>Predefined Variables</title> 6 </head> 7 <body> 8 <?php # Script 1.5 - predefined.php 9 10 // Create a shorthand version of the variable names: 11 $file = $_SERVER['SCRIPT_FILENAME']; 12 $user = $_SERVER['HTTP_USER_AGENT']; 13 $server = $_SERVER['SERVER_SOFTWARE']; 14 15 // Print the name of this script: 16 echo "<p>You are running the file:<br /><b>$file</b>.</p>\n"; 17 18 // Print the user's information: 19 echo "<p>You are viewing this page using:<br /><b>$user</b></p>\n"; 20 21 // Print the server's information: 22 echo "<p>This server is running: <br /><b>$server</b>.</p>\n"; 23 24 ?> 25 </body> 26 </html>   (2) 添加PHP开始标签和第一条注释。 <?php # Script 1.5 - predefined.php   从现在起,我的脚本将不再添加关于创建者、创建日期等的注释,尽管你应该继续这样做。不过,我将添加一个注释,列出脚本编号和文件名,以便进行交叉引用(在本书中,以及当你从本书的支持Web站点www.LarryUllman.com上下载它们时)。   (3) 创建脚本中要使用的第一个变量的简写版本。 $file = $_SERVER['SCRIPT_FILENAME'];   这个脚本将使用3个变量,它们都来自更大的、预定义的$_SERVER变量。$_SERVER指大量与服务器相关的信息。该脚本要使用的第一个变量是$_SERVER['SCRIPT_FILENAME']。这个变量存储要运行的脚本的完整路径和名称(例如,C:\Program Files\Apache\htdocs\predefined.php)。   $_SERVER['SCRIPT_FILENAME']中存储的值将被赋予新变量$file。用更短的名称创建新变量,然后从$_SERVER给它们赋值,这将使得在打印这些变量时更容易引用它们(它还避开了你将适时学到的其他一些问题)。   (4) 创建另外两个变量的简写版本。 $user = $_SERVER['HTTP_USER_AGENT']; $server = $_SERVER ['SERVER_SOFTWARE'];   $_SERVER['HTTP_USER_AGENT']代表访问脚本的用户的Web浏览器和操作系统。该值将被赋予$user。   $_SERVER['SERVER_SOFTWARE']代表运行PHP的服务器上的Web应用程序(例如,Apache、Abyss、Xitami、IIS)。必须安装这个程序(参见附录A),以便在计算机上运行PHP脚本。   (5) 打印出将被运行的脚本的名称。 echo "<p>You are running the file:<br /><b>$file</b>.</p>\n";   将要打印的第一个变量是$file。注意:这个变量必须打印在双引号内,我还利用PHP换行符(\n),它将在生成的HTML源文件中添加一个分行符。还会添加一些基本的HTML标签(段落和加粗),从而给生成的页面增添一些优雅的风格。   (6) 打印出访问脚本的用户的信息。 echo "<p>You are viewing this page using:<br /><b>$user</b></p>\n";   这一行代码打印第二个变量$user。为了重复第(4)步中所做的工作,使$user与$_SERVER['HTTP_ USER_AGENT']相关联,并引用正访问Web页面的操作系统、浏览器类型和浏览器版本。   (7) 打印出服务器信息。 echo "<p>This server is running: <br /><b>$server</b>.</p>\n";   (8) 完成HTML和PHP代码。 ?> </body> </html>   (9) 将文件另存为predefined.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-11)。 图1-11 predefined.php脚本向浏览器报告回关于脚本、正用于查看它的Web浏览器以及服务器自身的信息    提示 如果你对这个脚本或其他任何脚本有任何疑问,可以向本书相应的Web论坛(www.LarryUllman.com/forums/)求助,以获取帮助。 如果有可能,使用不同的Web浏览器和/或在另一个服务器上运行这个脚本(参见图1-12)。 图1-12 这是本书中第一个真正动态的脚本,这是由于Web页面依赖于运行它的服务器和查看它的Web浏览器而变化(对比图1-11) 创建变量时最重要的考虑事项是使用一致的命名模式。在本书中,你将看到变量名称全都用的是小写字母,并且用下划线分隔单词($first_name)。有些程序员更喜欢使用词首大写字母,例如:$FirstName(即驼峰式拼写法)。 PHP处理变量的方式非常随意,这意味着你不必初始化它们(设置一个即时值)或声明它们(设置具体的类型),并且你可以在多种类型之间转换一个变量,而不会引发任何问题。 1.5 介绍字符串   我将深入讨论的第一种变量类型是字符串。字符串只是一块用引号括起来的字符:字母、数字、空格、标点符号,等等。下面列出的全都是字符串: ‘Tobias’ “In watermelon sugar” ‘100’ ‘August 2, 2011’   为了建立一个字符串变量,可以给一个有效的变量名赋予一个字符串值: $first_name = 'Tobias'; $today = 'August 2, 2011';   在创建字符串时,可以使用单引号或双引号封装字符,就像在打印文本时所做的那样。此外,必须在字符的开头和末尾使用相同类型的引号。如果在字符串中间出现相同的引号,就必须对它进行转义: $var = "Define \"platitude\", please.";   另一种方式是使用单引号: $var = 'Define "platitude", please.';   为了打印字符串的值,可以使用echo或print: echo or print: echo $first_name;   为了在某种环境内打印出字符串的值,可以使用双引号: echo "Hello, $first_name";   你已经使用了一次字符串——在上一节中使用预定义的变量时。在下一个示例中,将创建和使用新的字符串。   使用字符串   (1) 在文本编辑器或IDE中创建一个新的PHP文档,命名为Strings.php。以HTML和PHP开始标签开头(参见脚本1-6)。 脚本1-6 在这个介绍性的脚本中创建字符串变量并把它们的值发送给Web浏览器 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>Strings</title> 6 </head> 7 <body> 8 <?php # Script 1.6 - strings.php 9 10 // Create the variables: 11 $first_name = 'Haruki'; 12 $last_name = 'Murakami'; 13 $book = 'Kafka on the Shore'; 14 15 // Print the values: 16 echo "<p>The book <em>$book</em> was written by $first_name $last_name.</p>"; 17 18 ?> 19 </body> 20 </html>   (2) 在PHP标签内,创建3个变量。 $first_name = 'Haruki'; $last_name = 'Murakami'; $book = 'Kafka on the Shore';   这个基本的示例创建了$first_name、$last_name和$book这3个变量,随后将会在一条消息中打印出它们。   (3) 添加echo语句。 echo "<p>The book <em>$book</em> was written by $first_name $last_name.</p>";   这个脚本所做的全部工作是基于已建立的3个变量打印出一份作者身份声明。其中插入了很少的HTML格式化效果(强调书名的斜体),使之更吸引人。记住在这里为要打印的变量值相应地使用双引号(在本章末尾将更详细地讨论双引号的重要性)。   (4) 完成HTML和PHP代码。 ?> </body> </html>   (5) 将该文件另存为strings.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-13)。 图1-13 得到的Web页面基于打印出的3个变量的值   (6) 如果需要,可更改3个变量的值,保存文件并再次运行脚本(参见图1-14)。 图1-14 通过改变脚本中的变量来改变脚本的输出    提示 如果把另一个值赋予现有的变量(比如:$book),新的值就会重写旧的值。例如:   $book = 'High Fidelity';   $book = 'The Corrections';   /* $book now has a value of   'The Corrections'. */ PHP没有对一个字符串的可能取值设置上限。理论上讲,它可能会受到服务器资源的限制,但是,不一定会碰到这样的问题。 1.6 连接字符串   连接(concatenation)像是为字符串增加的一种功能,通过它把字符添加到字符串的末尾。可以使用连接运算符(concatenation operator)即句点(.)来执行它: $city= 'Seattle'; $state = 'Washington'; $address = $city . $state;   $address变量的值现在是SeattleWashington,这几乎得到了期待的结果(Seattle, Washington)。为了对其进行改进,可以编写: $address = $city . ', ' . $state;   从而将逗号和空格添加到字符串混合中。   连接还可以处理字符串或数字。下面两条语句将会产生相同的结果(Seattle, Washington 98101): $address = $city . ', ' . $state . ' 98101'; $address = $city . ', ' . $state . ' ' . 98101;   我将修改strings.php脚本以使用这个新的运算符。   使用连接   (1) 在文本编辑器或IDE中打开strings.php(参见脚本1-6)。   (2) 在创建了$first_name和$last_name变量之后(第11、12行),添加如下一行代码(参见脚本1-7)。 脚本1-7 连接可将更多的字符追加到一个字符串中 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>Concatenation</title> 6 </head> 7 <body> 8 <?php # Script 1.7 - concat.php 9 10 // Create the variables: 11 $first_name = 'Melissa'; 12 $last_name = 'Bank'; 13 $author = $first_name . ' ' . $last_name; 14 15 $book = 'The Girls\' Guide to Hunting and Fishing'; 16 17 //Print the values: 18 echo "<p>The book <em>$book</em> was written by $author.</p>"; 19 20 ?> 21 </body> 22 </html>   如连接示范的那样,将会创建一个新变量——$author,作为两个现有字符串和它们之间一个空格的连接。   (3) 更改echo语句,使用这个新变量。 echo "<p>The book <em>$book</em> was written by $author.</p>";   因为把两个变量变成了一个变量,所以应该相应地改变echo语句。   (4) 如果需要,可以更改HTML页面标题,以及名字、姓氏和图书这几个变量的值。   (5) 将文件另存为concat.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-15)。 图1-15 在这个修改过的脚本中,连接的最终结果对用户并不是显而易见的    提示 PHP具有许多专用于字符串的函数,你将在学习本书的过程中看到它们。例如,为了计算一个字符串有多长(它包含多少个字符),可以使用strlen(): $num = strlen('some string'); // 11 PHP可以利用几个函数转换字符串的大小写:strtolower(),把字符串全都变为小写;strtoupper(),把字符串全都变为大写;ucfirst(),第一个字符大写;ucwords(),每个单词的第一个字符大写。 如果只把一个值连接到另一个值,则可以使用连接赋值运算符(concatenation assignment operator)(.=)。下面两条语句是等价的:   $title = $title . $subtitle;   $title .= $subtitle; 本节开始的示例也可重写成:   $address = "$city, $state";   或   $address = $city;   $address .= ', ';   $address .= $state; 使用PHP手册   在http://www.php.net/manual中可在线访问的PHP手册,列出了语言所有的函数和特性。该手册按照使用PHP的先后顺序进行组织,先讨论一般性概念(安装、语法、变量),最后是专题函数(MySQL、字符串函数等)。   要在PHP手册中快速查找函数,在浏览器中访问www.php.net/functionname(例如:http://www.php.net/print)。PHP手册为每个函数描述的内容如下:    函数有效的PHP版本;    函数的参数个数及类型(可选参数用方括号括起来);    函数的返回值类型。   手册还包含了每个函数的基本用法。   你应该养成查询PHP手册的好习惯。在遇到不熟悉的函数时,可以查询它的使用方法,还可以了解任何不明白的语言特性。更重要的是了解那些函数和特性的PHP版本,由于语言的发展,这些信息会不断地变化。 1.7 数字介绍   在介绍变量时,我明确指出PHP具有整型和浮点型(小数)数字类型。但是,依据我的经验,这两种类型可以归类到一般的数字(number)之下,而不会丢失任何有价值的差别(在极大程度上是这样)。PHP中有效的数字类型的变量可以是: 8 3.14 10980843985 4.2398508 4.4e2   注意:这些值永远不会用引号括起来(如果这样做,它们就是含有数值的字符串),也不能用逗号来表示千位分隔符。此外,数字被假定为正,除非在其前面放置一个负号(-)。   对数字除了可以使用标准的算术运算符(参见表1-1)之外,还可以使用许多函数。两个常用的函数是round()和number_format()。前者用于把小数四舍五入为最接近的整数: $n = 3.14; $n = round ($n); // 3   或者把小数四舍五入到指定的位数: $n = 3.142857; $n = round ($n, 3); // 3.143 表1-1 标准数学运算符 运 算 符 含  义 + 加法 – 减法 * 乘法 / 除法 % 取模 ++ 增量 –– 减量   number_format()函数用于把一个数字转换成更常见的表示形式,用逗号作为千位分隔符,例如: $n = 20943; $n = number_format ($n); // 20,943   这个函数还可以设置小数点的指定位数: $n = 20943; $n = number_format ($n, 2); // 20,943.00   为了练习操作数字,我将编写一个模型脚本,它执行人们可能在电子商务购物车中使用的计算。   使用数字   (1) 在文本编辑器或IDE中创建一个新的PHP文档,命名为number.php(参见脚本1-8)。 脚本1-8 numbers.php脚本演示了电子商务应用程序中使用的基本数学计算 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>Numbers</title> 6 </head> 7 <body> 8 <?php # Script 1.8 - numbers.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: 23 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>'; 24 25 ?> 26 </body> 27 </html>   (2) 建立必需的变量。 $quantity = 30; $price = 119.95; $taxrate = .05;   这个脚本将使用3个硬编码的变量,并在它们上面执行计算。在本书后面,你将看到如何能够动态地确定这些值(即通过用户与HTML表单的交互)。   (3) 执行计算。 $total = $quantity * $price; $total = $total + ($total * $taxrate);   第一行将订单总额设置为所购买小器具的数量乘以每件小器具的价格。然后,第二行把税金加到总额中(通过用税率乘以总额来计算)。   (4) 格式化总额。 $total = number_format ($total, 2);   number_format()函数将把总额用千位分隔符分开,并将其四舍五入为两位小数。这将为最终用户显示更合适的结果。   (5) 打印结果。 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>';   这个脚本中的最后一步是打印出结果。为了使用HTML、打印的美元符号以及变量的组合,echo语句使用了单引号括住的文本和连接的变量。你将在本章的最后一个示例中看到另一个解决方案。   (6) 完成PHP代码和HTML页面。 ?> </body> </html>   (7) 将文件另存为numbers.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-16)。 图1-16 数字PHP页面(参见脚本1-8)基于设置的值执行计算    (8) 如果需要,可更改最初的3个变量,然后重新运行脚本(参见图1-17)。 图1-17 要更改生成的Web页面,可以改变全部3个变量或其中的任何一个(对比图1-16)    提示 PHP在大多数平台上支持的最大整数在20亿左右。对于更大的数字,PHP将自动使用浮点类型。 当处理算术运算时,会出现优先级问题(执行复杂计算的次序)。虽然PHP手册和其他资源倾向于列出优先级的层次结构,但是,我发现把子句组织在括号中来强制执行次序,会使程序设计更安全、更易读(参见脚本1-8的第17行)。 计算机处理小数的名声不佳。例如,2.0这个数字实际上存储为1.999 99。在大多数情况下,这不是一个问题,但是,倘若数学精度极其重要,这就要依靠整数,而不是小数。PHP手册中包含关于这个主题的信息,以及用于改进计算准确性的备用函数。 许多数学运算符还具有相应的赋值运算符,从而允许简写赋值语句。下面的一行语句:   $total = $total + ($total * $taxrate);     可以重写为:   $total += ($total * $taxrate); 如果没有使用两位小数设置$price的值(例如,119.9或34),那么可能希望在打印$price之前,对其应用number_format()。 1.8 常量介绍   常量像变量一样,用于临时存储一个值,但是常量在许多方面与变量不同。对于初学者,要创建常量,可以使用define()函数,而不是赋值运算符(=)。 define ('NAME', value);   注意:一条经验法则是,全都使用大写字母来命名常量,尽管并非必须如此。最重要的是,常量不会像变量那样使用初始美元符号(因为严格说来常量不是变量)。   只能赋予常量一个标量值,比如字符串或数字: define ('USERNAME', 'troutocity'); define ('PI', 3.14);   与变量不同的是,不能更改常量的值。   为了访问常量的值,比如当你想打印它时,不能用引号括住常量,比如: echo "Hello, USERNAME"; // Won't work!   对于这段代码,PHP只会打印出Hello, USERNAME(参见图1-18),而不会打印出USERNAME常量的值(因为没有美元符号告诉PHP,USERNAME是不同于字面量文本的任何内容)。可以代之以单独打印常量: echo 'Hello, '; echo USERNAME;   或者使用连接运算符: echo 'Hello, ' . USERNAME;   PHP运行时利用了几个预定义的常量,这与本章前面使用的预定义变量非常相像。这些常量包括PHP_VERSION(PHP运行的版本)和PHP_OS(服务器的操作系统)。 图1-18 常量不能用引号括起来   使用常量   (1) 在文本编辑器或IDE中创建一个新的PHP文档,命名为constants.php(参见脚本1-9)。 脚本1-9 常量是在PHP中可以使用的另一种临时存储工具,它不同于变量 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>Constants</title> 6 </head> 7 <body> 8 <?php # Script 1.9 - constants.php 9 10 // Set today's date as a constant: 11 define ('TODAY', 'March 16, 2011'); 12 13 // Print a message, using predefined constants and the TODAY constant: 14 echo '<p>Today is ' . TODAY . '.<br /> This server is running version <b>' . PHP_VERSION . '</b> of PHP on the <b>' . PHP_OS . '</b> operating system.</p>'; 15 16 ?> 17 </body> 18 </html>   (2) 创建一个新的日期常量。 define ('TODAY', 'March 16, 2011');   人们普遍认为使用常量的意义不大,但是,这个示例将说明其重要性。在第9章中,你将看到如何使用常量来存储你的数据库访问信息。   (3) 打印出日期、PHP版本以及操作系统信息。 echo '<p>Today is ' . TODAY . '.<br />This server is running version <b>' . PHP_VERSION . '</b> of PHP on the <b>' . PHP_OS . '</b> operating system.</p>';   因为常量不能打印在双引号内,所以使用连接运算符来创建echo语句。   (4) 完成PHP代码和HTML页面。 ?> </body> </html>   (5) 将文件另存为constants.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-19)。 图1-19 通过利用PHP的常量,可以学习关于PHP设置的更多知识    提示 如果可能,可在另一台支持PHP的服务器上运行这个脚本(参见图1-20)。 这个操作系统名为Darwin(参见图1-19),是Mac OS X的技术术语。 在第12章中,你将学到另一个常量SID(它代表会话ID(session ID))。 图1-20 在另一台服务器上运行相同的脚本(参见脚本1-9)会获得不同的结果 1.9 单引号与双引号   在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-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语法打印美元字符,后面紧接变量的值。 如果你仍然不清楚这两种引号之间的区别,可以使用双引号,这样不太可能出问题。 1.10 基本的调试步骤   调试的确很难,这门技术必须得通过实际动手才能真正掌握。接下来的几十页内容都是专门阐述这一主题的,但即便如此,恐怕你也只能掌握必备调试技能中的一小部分。   之所以开局就如此悲观,是因为我想让你记住,没想好之前不要匆忙编程。有时代码不会如期工作,而程序员不可避免地会出现疏漏和错误,这会令人痛苦并抓狂——即使你使用的语言像PHP这样友好。总之,困惑和沮丧时常出现。自1999年起,我就开始用PHP编程了,但偶尔还是会不知所措。调试是一项需要掌握的重要技能,你将最终认识到它的必要性并深深体会到这一点。作为PHP编程历险的开始,本书将提供下面这些基础但又具体的调试技巧。   注意,这些都是为PHP初学者特别定制的一般的调试技巧。第8章将详细讲述其他技巧。 调试PHP脚本 确保你总是通过URL来运行PHP脚本! 这或许是初学者常犯的错误。PHP代码必须通过网络服务器软件运行,也就是说必须通过http://something发出请求。如果你看到的是PHP代码,而不是代码执行的结果,很可能是你没有通过URL运行PHP脚本。 了解正在运行的PHP版本。 一些问题是由PHP的版本所致。在使用任何支持PHP的服务器之前,运行phpinfo.php脚本(查看附录A)或参考PHP_VERSION常量来确认使用的PHP版本。 确保display_errors启用 这是一个基本的PHP配置设置(参见附录A)。你可以运行phpinfo()函数来确认设置(使用浏览器,在结果页中搜索display_errors)。出于安全的考虑,PHP可能没有设置成在发生错误的时候显示错误信息。如果是这种情况,当错误发生时你看到的将会是一个空白页。为了调试问题,需要查看错误信息,所以当学习的时候请启用这项设置。可以在附录A中找到相关的介绍。 检查HTML源代码。 有时候问题会隐藏在页面的HTML源代码中。事实上,有时PHP错误信息也会隐藏在那里。 信任错误信息! 初学者常犯的另外一个错误是不完整阅读PHP报告的错误消息,或者不完全相信这些错误。尽管这些错误消息有时非常含糊,并且看上去没有什么意义,但是还是不能忽略它!至少在错误发生于哪行代码这个问题上,PHP通常都是正确的。如果你需要将错误信息发给别人(比如当你要向我求助的时候),一定要包括全部的错误信息! 休息一下! 这么多年来我遇到过很多的编程问题,并且绝大多数最困难的问题,都是在我离开计算机去散步一会儿回来后解决的。编程时很容易陷入挫败与迷惑交织的痛苦中,在这种情况下,如果继续做下去,只会让事情变得更糟。 1.11 回顾和实践   本书会在每章的最后添加“回顾和实践”一节。在本节中,我会就本章涉及的内容提出一些问题,目的是巩固和扩展你学到的知识和技能。无论你是对本书内容存有疑问,还是在自学中遇到问题,都可以把问题发到本书论坛,我们会为你答疑解惑。 1.11.1 回顾 PHP代码要放在什么标签中间? PHP文件的扩展名是什么? 页面的字符编码指的是什么?字符编码的作用是什么? 可以使用什么PHP函数(或语句)向浏览器发送数据? 使用单引号和双引号创建或打印字符串有什么不同? 在字符串中escape一个字符的意思是什么? PHP中三种注释语法分别是什么?哪种可以用于多行注释? PHP的变量名以什么字符开始?接下来可以是哪些字符?变量名还可以包含其他哪些字符? PHP的变量名是否区分大小写? PHP的赋值运算符是什么? 如何创建字符串变量? PHP的连接操作符是什么?连接赋值操作符是什么? 如何定义和使用常量? 1.11.2 实践 如果你还不清楚或不确定你正使用的PHP版本,检查一下。 在PHP手册中查找一个本章提及过的字符串函数,然后检查里面列出的其他的字符串函数。 在PHP手册中查找一个本章提及过的数值函数,然后检查里面列出的其他的数值函数。 在PHP手册中搜索$_SERVER变量,查看它包含的其他信息。 从头编写一个新脚本,定义一些字符串变量并输出它们的值。为输出值语句echo和print使用双引号。在输出中加入一些HTML,以增加复杂度。然后使用单引号和拼接代替双引号重写脚本。 从头开始创建一个新的脚本,定义、操作并显示一些数值型变量的值。

>PHP与MySQL动态网站开发

PHP与MySQL动态网站开发
作者: Larry Ullman
原作名: PHP and MySQL for Dynamic Web Sites:Visual QuickPro Guide
isbn: 7115299404
书名: PHP与MySQL动态网站开发
页数: 638
译者: 杜凯, 陈宗斌
定价: 99.00元
出版社: 人民邮电出版社
装帧: 平装
出版年: 2013-1