《PHP和MySQL Web开发(原书第4版)》将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。
《PHP和MySQL Web开发(原书第4版)》是第4版,经过了全面的更新、重写和扩展,包括PHP 5.3改进的特性(例如,更好的错误和异常处理),MySQL的存储过程和存储引擎,Ajax技术与Web 2.0以及Web应用需要注意的安全问题。
PHP平IEIMySQL是非常流行的开源技术,它们非常适合快速开发数据库驱动的Web应用。PHP是一种功能强大的脚本语言,专门用于快速创建高性能的Web应用,而MySQL则是一个快速而又可靠的数据库,它能很好地与PHP集成,适用于基于互联网的动态应用。
《PHP和MySQL Web开发(原书第4版)》介绍了如何使用这些工具创建高效和交互式的Web应用。它清晰地介绍了PHP语言的基础,解释了如何设置和使用MySQL数据,以及如何使用PHP与数据库和服务器进行交互。
《PHP和MySQL Web开发(原书第4版)》非常实用,包括大量实际应用中的例子。例如,用户验证、创建购物车、动态生成PDF文档和图像、发送和管理电子邮件、管理用户讨论、使用XML连接Web服务,以及使用基于Ajax的交互性开发Web 2.0应用。
与上一版相比,本书经过了更新、重写以及扩展,并涵盖了PHP 5到5.3的所有特性,例如命名空间和闭包以及MySQL 5.1引入的特性。
5.1 代码重用的好处
软件工程师的一个目标就是通过重复使用代码来避免编写新的代码。这样做并不是因为他们懒,而是因为重新使用已有的代码可以降低成本、增加代码的可靠性并提高它们的一致性。在理想情况下,一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小。
5.1.1 成本
在一个软件的有效生命周期中,相当多的时间是用在维护、修改、测试和文档化记录上,而不是最初花在编码上的时间。如果要编写商业代码,应该尽量限制结构中所用到的代码行数。一个最常使用的方法就是:重新使用已有的代码,而不是为一个新任务编写一个和原来代码只有微小区别的新代码。更少的代码意味着更低的成本。如果市场上已经存在能够满足需求的软件,那就购买软件。购买已有软件的成本总是要小于开发一个等价产品的成本。如果有现成的软件基本上能够满足要求,那就必须小心地使用它。修改已有的代码可能会比编写新代码更加困难。
5.1.2 可靠性
如果一个模块代码已经在代码结构中使用了,可以认为它是已经通过测试的。即使代码只有几行,在重写时仍然可能忽略两方面的内容,一是原作者融入其中的某些东西,二是代码测试发现缺陷后,对原来代码添加的一些东西。使用现存的成熟的代码通常要比新鲜的“绿色”代码更可靠。
5.1.3 一致性
系统的外部接口应该是一致的,其中包括用户接口和系统的外部接口。编写一段新的并且能够和系统函数的其他部分保持一致的代码需要花些心思和努力。如果重复使用运行在系统其他部分的代码,所实现的功能自然就会达到一致。
除了这些优点外,只要原来的代码是模块化的而且编写良好,那么重复使用代码还会节省许多工作。在工作时,可以试着辨认一下今后可能再次要调用的代码段。
5.2 使用require()和include()函数
PHP提供了两个非常简单却很有用的语句,它们允许重新使用任何类型的代码。使用一条require()或include()语句,可以将一个文件载入到PHP脚本中。通常,这个文件可以包含任何希望在一个脚本中输入的内容,其中包括PHP语句、文本、HTML标记、PHP函数或PHP类。
这些语句的工作方式类似于大多数Web服务器提供的服务器端包含方式以及C语言或C++中的#include语句。
require()和include()几乎是相同的。二者唯一的区别在于函数失败后,require()函数将给出一个致命的错误。而include()只是给出一个警告。
require()和include()也有两个变体函数,分别是require_once()和include_once()。正如你可能猜到的,这两个函数的作用是一个被引入(included)的文件只能被引入一次。对于我们已经介绍过的例子——页眉和脚注(header and footer)——这个功能并不是非常有用。
当使用require()和include()来引入函数库时,它们才非常有用。使用这两个函数可以防止错误的引入同样的函数库两次,从而出现重复定义的错误。如果关心编码实践,可以考虑使用require()和include(),因为它们的运行速度较快。
5.2.1 文件扩展名和require()函数
如下所示的代码保存于reusable.php文件中:
如下所示的代码保存于main.php文件中:
如果载入reusable.php,当浏览器中显示出“Here is a very simple PHP statement”时,你不会感到奇怪。如果载入main.php,则会发生一件更有趣的事情。该脚本输出结果如图5-1所示。
当需要一个文件的时候,可以使用require()语句。在前面的例子中,我们使用的文件是reusable.php。当运行该脚本时,require()语句:
将被请求的文件内容代替,然后再执行脚本。这就意味着,当载入main.php文件时,它会像如下所示的代码那样执行:
当使用require()语句时,必须注意处理文件扩展名和PHP标记的不同方式。
PHP并不会查看所需文件的扩展名。这就意味着,只要不想直接调用这个文件,就可以任意命名该文件。当使用require()语句载入文件时,它会作为PHP文件的一部分被执行。 通常,如果PHP语句放在一个HTML文件(例如,名为page.html的文件)中时,它们是不会被处理的。PHP通常用来解析扩展名被定义成如.php的文件。(在Web服务器配置文件中可能不是这样)但是,如果通过require()语句载入这个page.html,文件内的任何PHP命令都会被处理。因此,可以使用任何扩展名来命名包含文件,但要尽量遵循一个约定,例如将扩展名命名为.inc是一个很好的办法。
需要注意的一个问题是,如果扩展名为.inc或一些其他的非标准扩展名的文件保存在Web文档树中,而且用户可以在浏览器中直接载入它们,用户将可以以普通文本的形式查看源代码,包括任何密码。因此,将被包含文件保存在文档树之外,或使用标准的文件扩展名是非常重要的。
提示:
在这个例子中,可重用文件(reusable.php)代码如下所示:
我们将文件中的PHP代码放到PHP标记之间。如果希望一个所需文件中的PHP代码能
被当成PHP代码进行处理,就必须这样做。如果不使用PHP标记,代码将会被视为文本或者HTML脚本,因此也就不会被执行。
5.2.2 使用require()制作Web站点的模版
如果Web页面具有一致的外观,可以在PHP中使用require()语句将模版和标准元素加
到页面中。
例如,一个虚构的TLA咨询公司的网站有许多页面,这些页面的外观看上去都如图5-2所示。当需要一个新页面的时候,开发人员可以打开一个已有页面,从文件中间剪切所需的文本,输入所需的新文本,然后以新的文件名保存。
考虑这种情况:网站已经存在了一段时间,如今已有数十个、数百个甚至数千个页面都是同一种风格。现在,要对标准外观进行部分修改—这种修改可能是很微小的改变,例如,在每个脚注上加一个电子邮件地址,或者加上一个新的导航菜单入口。你希望对这数十个、数百个甚至数千个页面都做这种微小的修改吗?
相对于剪切粘贴数十个、数百个甚至数千个页面,直接重用各个页面中通用的HTML代码部分是一个更好的办法。程序清单5-1给出了图5-2所示页面(home.html)的源代码。
……