|
PHP5 的历史、功能、特性
PHP(英文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域。
PHP 独特的语法混合了 C、Java、Perl 及 PHP 自创的语法。它可以比 CGI 或者 Perl 更快速地执行动态网页。PHP 是将程序嵌入到 HTML 文档中执行,用 PHP 做出的动态页面与其他的编程语言相比,执行效率比完全生成 HTML 标记的 CGI 要高很多;PHP 还可以执行编译后代码,编译可达到加密、优化代码运行目的,使代码运行更快。
PHP 原为 Personal Home Page 的缩写,已正式更名为 "PHP: Hypertext Preprocessor"。注意不是 “Hypertext Preprocessor” 的缩写,这种将名称放到定义中的写法被称作递归缩写。PHP 于 1994 年由 Rasmus Lerdorf 创建,刚开始 Rasmus Lerdorf 是为了维护个人网页而制作的一个简单的用 Perl 语言编写的程序。这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用 C 语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。
历史
2000 年 5 月 22 日以 Zend Engine 1.0 为基础的 PHP 4 正式发布。
2004 年 7 月 13 日发布 PHP 5,PHP 5 使用了第二代的 Zend Engine。此时的 PHP 包含了许多新特色,像是强化面向对象功能、引入 PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。PHP 4 目前已不会继续更新,以鼓励用户转移到 PHP 5。
前提
尽管 PHP 4 之前的发展很迅猛,但较之于其他流行开发语言还是缺乏一些关键功能特性。譬如:PHP 4 的面向对象功能并不完善,也无法实现异常(Exception)的捕捉与处理。因此在一些特殊问题的处理上还是捉襟见肘的。
2004 年 7 月,PHP 5 正式发布,标志着一个全新 PHP 时代的到来。它的核心是第二代 Zend 引擎,并引入了对全新的 PECL 模块的支持。PHP 5 的最大特点是引入了面向对象的全部机制,并且保留了向下的兼容性。程序员不必再编写缺乏功能性的类,并且能够以多种方法实现类的保护。另外,在对象的集成等方面也不再存在问题。使用 PHP 5 引进了类型提示和异常处理机制,能更有效的处理和避免错误的发生。
在不断更新的同时,PHP 5 依然保留着对旧有 PHP 4 程序的支持;PHP 4 程序可运行在 PHP 5 平台上而不会出现较大问题。随着 MySQL 数据库的发展,PHP 5 还绑定了新的 MySQL 扩展模块,它提供了一些更有效方法和实用工具用于处理数据库操作。这些方法大都以面向对象的方式实现,同时也极大地提高了基于数据库的 Web 项目的执行速度。
另外,PHP 5 还改进了创建动态图片功能,能够支持多种图片格式(如:PNG、GIF、TIF、JPG、JPEG 等)。PHP 5 内置了对 GD2 库的支持;因此,安装 GD2 库(主要指 UNIX 系统中)也不再是件难事,这使得 PHP 5 处理图像变得十分简单且高效。
以前,很多 Web 程序开发者会将 XML 作为一个彻底的简单数据库进行使用。PHP 5 中也采用了一系列简单易用、功能强大的方法处理 XML 文档。
今天,已经有包括雅虎和亚马逊等在内的数百万网站,以及众多的开发人员和编程爱好者正在使用 PHP。从最初的 PHP/FI 到 PHP 5,PHP 的发展是非常迅猛的,其未来的发展前景也必定令世人所瞩目。
开创新时代
PHP 5 发布 3 年后,PHP 4 仍在为各大虚拟主机提供服务,大量主机 hosting 上还是永远的 PHP 4。之所以造成这种情况,有着多方面的原因。
许多基于 PHP 的网站应用,当时既有运行 PHP 4 的,也有运行 PHP 5 的。PHP 4 在 2000 年发布后,迅速巩固了作为网络开发语言的统治性地位。PHP 5 于 2004 年发布后,在功能上虽有显著改进,但由于许多新平台发布伴随着 “鸡和蛋 (PHP 4 的影响力太大)” 的问题;所以 PHP 5 的发展,刚开始的前几年非常慢。原因如下:
1、PHP 开发者还没摸透 PHP 5;在没有 PHP 4 的情况下,用 PHP 5 来运行从前的应用会不会有潜在问题。
2、大量主机仍安装的是 PHP 4,这会使用户避免选择 PHP 5 only 的 web 应用程序。出于这种原因之下,大量主机商还不能马上升级到 PHP 5,因为他们不知道用户将要跑 PHP 4 或是 PHP 5 的 web 应用。这样一来,PHP 的开发者越发不能摆脱 PHP 4,他们为了适应环境,写出来的代码可能都是 PHP 4/PHP 5 兼容的。
这些对于 PHP 开发者来说,是如同梦魇般的一个死循环。一些 open source 的 PHP 开发团体为了摆脱这种困境,终于决定做出一些动作来打破僵局了!
他们宣称:在 2008 年 2 月后发布的程序将仅支持 PHP 5.2.0 以后的版本 (官方的支持,意味着某些程序还是能保持对 PHP 4 的兼容性,但不再承诺)!这个活动被称之为 “Go PHP 5”!当年,这些 PHP 开发团体有参与:Drupal、Joomla、CakePHP、Symfony、Gallery、WordPress。
2007 年 7 月 5 日 PHP 开发者联盟也宣称:为使 PHP 开发者社区完全迁移到 PHP 5 版本的努力获得认可,一些开源 PHP 项目将从 2008 年 2 月 5 日放弃支持 PHP 旧版本。
作为努力的一部分:Symfony、Typo 3、phpMyAdmin、Drupal、Propel、和 Doctrine 这些项目也都宣布 2008 年 2 月 5 日后,他们的下一个版本将采用 PHP 5.2,且已经向其它 PHP 项目和应用发出了公开邀请,包括开源和非开源的,希望他们参与到这项努力中来。
自从 “Go PHP 5” 之后,有超过 100 个软件开发项目和超过 200 个网络主机开始支援 PHP 5.2。相比之前,现在可轻松找到托管解决方案,软件开发商亦可使用 PHP 5 具吸引力的新功能,而无需担心他们的用户别无选择。
对于用户来说,使用 PHP 4 或 PHP 5 无关紧要,他们需要的仅仅是他的 Web 程序可在服务器上托管运行。那么列表中拥有大量用户基础的 PHP 社区的转向,将驱动主机商升级到 PHP 5。
新特性
PHP 5 在长时间的开发及多个预览版后,于 2004 年 7 月 13 日正式发布 PHP 5.0 。该版本以 Zend Ⅱ 引擎为核心,并加入了很多新功能,譬如:PHP Data Objects(PDO)。PHP 5.0 内置了更多功能:
1、完全实现面向对象,提供名为 PHP 兼容模式的新功能。
2、PHP 5.0 直接支持访问 XML 数据,有名为 SimpleXML 的 XML 处理界面。强化了 XMLWeb 服务支持,标准同时支持 SOAP 扩展模块。
3、PHP 5.0 将提供旨在访问 MySQL 的新界面。除此前界面外,还可使用面向对象界面、预处理语句(Prepared Statement)等 MySQL 新功能。
4、PHP 5.0 还捆绑了小容量的 RDBMS-SQLite。
新对象模式
1、构造函数和析构函数
在 PHP 4 中当函数与对象同名时,这个函数将成为该对象的构造函数;因为,在 PHP 4 中还没有析构函数的概念。
在 PHP 5 中构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。
2、对象引用
在 PHP 4 中传递变量要给一个函数或方法,实际是把这个变量做了一次复制。这也就意味着:传给函数或方法的是这个变量的一个副本,除非使用引用符号 “&;” 来声明是要做一个引用,而不是一个 Copy。
在 PHP 5 中对象总是以引用的形式存在。对象中的赋值操作同样也都是引用操作。
3、对象的克隆
当一个对象始终以引用的形式被调用时,如果想得到该对象的副本,该怎么办呢?
PHP 5 提供了一个新功能:就是对象克隆,语法为 __clone。
4、抽象类
抽象类不能被实例化。抽象类与其它类一样,允许定义变量及方法。抽象类同样可以定义一抽象方法,抽象类方法不会被执行,不过将有可能会在其派生类中执行。
5、__call
PHP 5 对象新增了一专用方法 __call(),此方法用来监视对象中的其它方法。若试着调用对象中不存在的方法,__call 方法将会被自动调用。
6、__set 和 __get
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
7、类型指示
PHP 5 可在对象方法中指明其参数必须为另一个对象的实例。
8、静态成员和静态方法
静态成员和静态方法在面象对象编程的术语中被称作 “类方法(class methods)” 和 “类变量(class variables)”。
“类方法” 在一个对象没有实例化前允许被调用。同样,“类变量” 在一个对象没有实例化前可被独立操控(不需要用一个对象的方法来控制)。
异常
1、异常处理
异常处理是公认的处理程序错误的理想方法,在 Java 及 C 中都有这个概念。我们欣喜的看到,在 PHP 5 已经加入了这方面的功能。你可以尝试使用 “try” 和 “catch” 来控制程序错误。
当有错误发生时,代码会把错误交给 “catch” 子句来处理。在 “catch” 子句中,需指明把错误交给某个对象处理。这样做可使代码结构看起来更清晰,因为可把所有错误信息交给一个对象来处理。
2、自定义错误处理
用自定义的错误处理代码,可很方便地控制程序中的意外错误。仅需从异常类中派生出一个错误控制类;但在错误控制类中,需要有一个构造函数和一个 getMessage 方法。
命名空间
名称空间对类或函数分组会很有用。可把一些相关类或函数组合到一起,方便以后调用。示例:
- <?php
- namespacemy\name;//参考"定义命名空间"小节
- classMyClass{}
- functionmyfunction(){}
- constMYCONST=1;
- $a=newMyClass;
- $c=new\my\name\MyClass;//参考"全局空间"小节
- $a=strlen('hi');//参考"使用命名空间:后备全局函数/常量"小节
- $d=namespace\MYCONST;//参考"namespace操作符和__NAMESPACE__常量”小节
- $d=__NAMESPACE__.'\MYCONST';
- echoconstant($d);//参考"命名空间和动态语言特征"小节
- ?>
复制代码 注意:需要在何种情况下使用名称空间,在实际运用中,可能需要声明两个或多个名称一样的对象来做不同的事情。那么,可把他们分别放到不同名称空间中(但接口要相同)。
加密
PHP 5.3 开始支持 Zend Guard 加密方式,必须安装 Zend Guard Loader,老的 zend optimizer 将不再支持。
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
|
|