PHP概述

来自站长百科
跳转至: 导航、​ 搜索

导航: 上一页 | ASP | PHP | JSP | HTML | CSS | XHTML | aJAX | Ruby | JAVA | XML | Python | ColdFusion

历史[ ]

最初的 PHP 要追溯到 1995 年,当时一个名叫Rasmus Lerdorf 的独立软件开发承包人开发了一个Perl/CGI 脚本,可以让他了解有多少访问者阅读了他的在线简历。他的脚本执行两项任务:将访问者信息记入日志,显示网页访问者的数量。Web 虽然现在已经家喻户晓,但在当时却很年轻,所以类似的工具以前从未有过,于是人们向 Lerdorf 发送电子邮件咨询他的这个脚本。自此 Lerdorf 开始分发他的工具集,并称之为个人主页(PHP)。
由于对 PHP 工具集的呼声很高,这促使 Lerdorf 继续开发这种语言。他增加了一个能把在 HTML表单中输入的数据转换为符号变量的功能,从而允许导出到其他系统,这或许算得上是早期最突出的一次改进。为此,他选择用C 而不是 Perl 代码来进行后续的开发。对 PHP 工具集的不断增补在 1997年 11 月达到了顶峰,这时发行了 PHP 2.0,即“个人主页——表单解释器”( PHPFI)。由于 PHP 不断普及,所以 2.0 版本得到了来自全世界程序员的大量改进和提高。这个新 PHP 版本非常流行,很 快就有一个核心开发团队加入到 Lerdorf。他 们保持了原先在 HTML中直接加入代码的概念,重新编写了解析引擎,这就诞生了 PHP 3.0。到 1998 年 6 月发行版本 3.0 为止,已经有超过 5 万个用户在使用 PHP 改进其网页。
注解
1997年还出现了一个变化,PHP的含义由Personal Home Page(个人主页)变成了HypertextPreprocessor(超文本预处理器)的缩写词。接下来的两年中,开发继续狂热地进行着,又增加了成百上千项功能,用户数量也在飞速增长。
在 1999 年初,Netcraft(http://www.netcraft.com/)公布了一个保守的估计,称用户数已经超过了 100 万,这说明 PHP 已经成为了世界上最流行的脚本语言之一。它 的广泛流传甚至超出了开发人员最乐观的期望,并且很快用户们准备用 PHP 开发功能更强大的应用程序。两位核心开发人员(ZeevSuraski 和 Andi Gutmans)开始主动地彻底重新考虑 PHP 的工作方式,最终改写了 PHP 的解析器,称之为 Zend 脚本引擎。这些工作的最终成果就是 PHP 4 的发布。



PHP 4[ ]

2000 年5 月22 日,第一次正式宣布再次开发之后的大约18 个月,发布了PHP 4.0。许多人都认为PHP 4的发布是这种语言在企业级开发环境下的正式亮相,这 个观点也由于PHP的迅速普及得到了佐证。仅仅在发布后的几个月内,Netcraft(http://www.netcraft.com/)估计就有超过 360 万个域安装了PHP。

特性[ ]

PHP 4 包括了以下几项企业级的改进:
改进了资源处理:
可 扩展性是版本 3.X 的主要缺点之一。这 主要是因为设计者低估了这种语言,没考虑到它会大量用于大规模应用程序。最初并没有打算用这种语言开发企业级网站,但后来确实有这样的尝试,这就使得开发人员开始重新考虑这种语言的机制。最终促使在版本 4中对资源处理进行了大幅改进。
面向对象的支持:
版本 4 在一定程度上结合了面向对象的功能,尽管一般认为这只是一个很平常的实现。不过,对于使用传统面向对象程序设计(OOP)语言的用户来说,这个新特性在吸引这些用户方面起到了非常重要的作用。除了对象重载和运行时类信息,PHP 还支持标准的类和对象开发方法。版本 5 支持更复杂的 OOP 实现,第 5 章将介绍这方面的内容。
内置 的会话处理支持 :
版本 3.X 通过第三方包 PHPLIB(http://phplib.sourceforge.net)来支持 HTTP 会话处理,在 版本 4 中 HTTP 会话处理则是内置的功能。这个特性使得开发人员可以相当高效轻松地跟踪用户活动和偏好。第 15章将介绍 PHP 的会话处理功能。
加密:
MCrypt(http://mcrypt.sourceforge.net)库引入到默认发行包中,为用户提供了完全加密和散列加密,使用的加密算法包括 Blowfish、MD5、SHA1 和三重 DES 等。第18 章将讨论 PHP 的加密功能。
ISAPI 支持:
对 ISAPI 的支持使用户能够将 PHP 与微软的 IIS Web 服务器(作为一个 ISAPI模块)结合使用,大大提高了性能和安全性。
内置 COM/DCOM 支持:
对 Windows 用户来说,另 一个好处是 PHP 4 能够访问和实例化 COM对象。这项功能扩展了与 Windows 应用程序的互操作性。
内置 Java 支持:
这也是 PHP 在互操作性方面的一大进步,版本 4.0 支持 PHP 应用程序绑定Java 对象。
与 Perl 兼容的正则表达式(PCRE)库:
Perl 语言一直以来在字符串解析领域雄霸天下,占据着统治地位。开发人员知道,如果想让 PHP 得到广泛认可,强大的正则表达式功能会起到重要作用。他们的做法只是集成 Perl 的功能,而不是重新开发,并将 PCRE 库的包集成在 PHP的默认发行包中(版本 4.2.0)。第 9 章将详细介绍这个重要的特性,并介绍经常引起混淆的正则表达式语法。
除了这些特性外,版本 4 还添加了几百项功能,大大提升了这种语言的能力。本书中,我们将讨论其中大部分功能,因为这些功能在版本 5 中仍然很重要。


缺点[ ]

在 PHP 语言的发展历程上,PHP 4 代表着一次巨大的飞跃。这个新版本带来的新功能、强大能力和可扩展性对开发新手和老手都产生了不小的震动,这 也使 PHP 在 Web 脚本领域确立了牢固的地位。但是,要想让用户对哪种语言矢志不渝是很困难的事情;程序员通常会有这样一种想法“你最近为我做了什么”。PHP 开发团队牢记这一点,因为不久以后他们就开始着手开展另一个里程碑性的任务,要在Web 脚本领域推出一个重量级语言(就像一个800 磅的大猩猩):PHP 5


PHP5[ ]

版本 5 是 PHP 语言发展历程中的另一座分水岭。虽然前面的主要版本已经增加了许多库,版本 5则在现有的功能上又进行了许多改进,并且增加了成熟的编程语言体系结构才有的一些特性:
极大地提高了面向对象能力:
PHP 的面向对象体系结构得到了改进,这是版本5 最突出的特点。版本 5 增加了很多功能,如显式构造函数和析构函数、对象克隆、类抽象、变量作用域和接口等。另外,PHP 在处理对象管理方面也有重大改进。
try/catch 异常处理:
具有讽刺意味的是,在结构化编程语言中设计错误处理策略时,不仅非常容易出错,而且很难保持一致。为了解决这个问题,版本5 开始支持异常处理。在许多语言中,如C++、C#Python 和Java 等,异常处理长期以来一直都是错误管理方面的中流砥柱,它为建立标准化的错误报告逻辑提供了一种绝佳的方法。这种方便的新方法将在第8 章中介绍。
改进的字符串处理:
之前版本的 PHP 默认地将字符串看作数组,这也反映了 PHP 原先的数据类型观点不够严密。这种策略在版本 5 中有所调整,引入了一种专门的字符串偏移量(offset)语法,而以前的方法已经废弃不用。第9 章将讨论这种新语法带来的新特性、变化和效果。
改进的XML 和Web 服务支持:
现在的 XML 支持建立在 libxml2 库基础上,还引入一个很新但非常有前途的扩展包来解析和处理 XML:SimpleXML。此外,PHP 5 还支持 SOAP 扩展。第 20 章将介绍这两个新扩展,并介绍一些很棒的第三方Web 服务扩展。
对 SQLite 的内置支持:
开 发人员的脚步一直没有停止,还 为功能强大但很简洁的 SQLite 数据库服务器(http://www.sqlite.org/)提供了支持。如果开发人员需要一些重量级数据库产品中才有的特性,同时不希望带来相应的管理开销,SQLite 就能为这些开发人员提供一个方便的解决方案。第22 章将介绍 PHP 为这个强大的数据库引擎提供的支持。




实用性[ ]

自始以来,PHP 就是以实用性为目的而创建的。毕竟,Lerdorf 最初的意图不是设计一门全新的语言,而只是为了解决一个没有现成解决方案的问题。此外,PHP 早期的发展并非明确地希望改进语言本身,而只是要为用户增加功能。其结果就是建立了一个最低需求(minimalist)语言,不仅对用户的需求很低,对语言的语法需求也很低。对于刚入门的人来说,一个有用的 PHP 脚本可能只包含一行代码;与 C 不同,它不需要导入库函数。
PHP 语言很强调紧凑性,这还反映在它能嵌套函数。例如,通过在一行代码中按特定的顺序调用函数,可以对一个值进行一系列修改。
PHP 是一种类型松散的语言,这意味着不需要明确地创建变量、指派类型或撤销变量,当然也没有绝对禁止做这些操作。PHP 在内部处理这些情况,脚本中使用变量时 PHP 会动态创建变量,并使用最优推测规则自动指派变量的类型。
PHP 还会在脚本结束时自动撤销变量,将资源返回给系统。从这些方面来看,由于 PHP 在内部处理了编程的许多管理方面的问题,这就允许开发人员集中精力去完成最终的目标,也就是开发一个实用的应用程序。



强大功能[ ]

在前面介绍 PHP 5 时就已经提到,这个新版本相对于以前的版本更重视质量,而非数量。以前的主要版本向 PHP 的默认库增加很多特性,每次发行新版本都会增加几百项新功能。目前,PHP 有 113个可用的库,总共有 1000 余项功能。也许,你知道 PHP 能访问数据库、处理表单信息以及动态创建页面,但你可能不知道 PHP 还有以下功能:
创建并处理Macromedia Flash、图片和 PDF 文件。
将密码与字典数据和容易破解的模式进行比较,评估密码的可猜测性。
与轻量级目录访问协议(LDAP)通信。
使用基于 POSIX 和 Perl 的正则表达式库解析最复杂的字符串。
通过存储在纯文本文件、数据库或Microsoft 活动目录中的登录凭证来鉴别用户身份。
与多种协议通信,包括 IMAP、POP3、NNTP 和 DNS 等。
与大量信用卡处理解决方案通信。
当然,后面的章节将尽可能地涵盖 PHP 的各项有趣而且有用的特性。


可选择性[ ]

PHP 开发人员很少只局限于一种实现方案。相反,这个语言为用户提供了充分的选择。例如,考虑一下 PHP 对数据库的支持。P HP 为不少于 25 种数据库产品提供了内置支持,包 括 Adabas D、d Base、Empress、F ilePro、F rontBase、H yperwave、IB M DB2、In formix、In gres、In terbase、m SQL、d irect MSSQL、MySQL、Oracle、Ovrimos、PostgreSQL、Solid、Sybase、UNIX dbm 和 Velocis。此外,也可以利用抽象层功能来访问 Berkeley DB 类型的数据库。最后,还有两个数据库抽象层可用,一个称为 dbx 模块, 另一个是通过 PEAR 的 PEAR DB。
PHP 强大的字符串解析功能也为用户提供了丰富的可选择性。除了超过 85 个字符串处理函数之外,PHP 还支持基于 POSIX 和 Perl 的正则表达式格式。这种灵活性使不同水平的用户都能获益,不仅能够(利用字符串处理函数)立即开始完成复杂的字符串操作,还可以(利用正则表达式)将有类似功能的程序(如 Perl 和 Python)快速移植到 PHP。
你更喜欢函数式编程语言吗?还是采用面向对象范型(objectorientedparadigm)的语言?PHP 对二者都提供了全面的支持。虽 然 PHP 最初只是一种函数式语言,但 开发人员很快就意识到提供流行的OOP 范型的重要性,并开始实现一种可扩展的解决方案。这里反复强调的重点是,PHP 允许你充分利用目前掌握的技能,只需投入很少的时间就能很快地开始 PHP 开发。这种策略在整个语言中频频出现,这里提到的只是其中很少的一部分例子。


成本[ ]

PHP 从一开始就对使用、修改和再分发没有任何限制。最近几年,满足这种开放许可限制的软件称为开源软件(opensourcesoftware)。开源软件和因特网就像面包和黄油一样密不可分。开源项目如 Sendmail、Bind、Linux 和 Apache 都在因特网的发展方面起到了非常重要的作用。虽然媒体最为追捧的是开源软件可以自由使用,但它还有另外几个同样重要的特点(甚至更重要):
没有大多数商业产品所要求的许可限制:商业软件往往有许多许可限制,而开源软件的用户没有这些限制。虽然在许可权限上存在差异,但一般来讲,用户都能自由地修改和重新分发开源软件,还能将开源软件整合到其他产品中。
开放式开发和审计过程:虽然也曾有过一些意外事件,但开源软件在安全方面还是享有很好的声誉。这种高标准正是开放式开发和审计过程的结果。因为任何人都能自由使用源代码,所以安全漏洞和潜在的问题会很快被发现并得以修复。开源倡导者 Eric S. Raymond 很好地总结了这项优点,他说:“ 只要有足够的眼睛,所有的 bug 都无处遁形。”
鼓励参与:开发团队不限于某个组织。任何感兴趣的人,只要具有相应的能力,都可以自由地加入到项目中。由于不对成员进行限制,这就大大增加了项目的人才储备,必然能贡献出更高质量的产品。