一、了解PHP
PHP(“PHP: Hypertext Preprocessor
”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
二、PHP发展史
1994年,拉斯姆斯·勒多夫(Rasmus Lerdorf)创造了 PHP,事实上这个时候的 PHP 只是用 Perl 语言编写的一系列 CGI 脚本,用于跟踪他在线简历的访问情况,统计他自己网站的访问者。勒多夫把这些 CGI 脚本命名为“Personal Home Page Tools”。这里我们姑且称之为 PHP 1 吧!但这个早期的 PHP Tools 并不是一门语言,只是一些工具,提供基本的变量,并使用嵌入式HTML句法自动处理表单变量。
由于勒多夫写的这个小程序轻巧且简便,吸引了很多人的关注,在1995年,勒多夫发布了 PHP/FI 2.0。这个FI是一个可以做 SQL 查询的东西,2.0是其更新版本。这次发布了一个基本完善的工具包,它不仅可以访问数据库,还能嵌入 HTML 中动态处理数据。新的工具包,吸引了很多的程序开发者,其中包括 Zeev Suraski(泽埃夫·苏拉斯基)和 Andi Gutmans(安迪·古曼兹),他们后来加入到了PHP3的开发当中。
在1997年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski 及 Andi Gutmans。1998年末,PHP 3 第一个官方正式版发行,其特点是具有更好的执行效果和更清晰的结构。此外,该版本最强大的地方在于它的可扩展性,这点吸引的大量的开发人员加入并提交新的 PHP 扩展模块。
这个全新的语言伴随着一个新的名称的发布,它标志着 PHP 不在仅仅是个人网页的小工具。尽管它还叫 PHP,但其全称叫“PHP: Hypertext Preprocessor”。这种递归的写法,并非 PHP 独创,众所周知,GUN 便是“GUN’s Not UNIX”的缩写。
在 PHP 3 发布不久,Zeev Suraski 及 Andi Gutmans 就开始投入到 PHP 4 的开发当中,主要目标是增强程序运行性能和 PHP 自身的模块性。新的 PHP 核心被称为“Zend”引擎(两名开发者的缩写),由 C 语言编写,相同的 PHP 脚本在新版本中运行,性能提高了近十倍。在千禧年(2000年),PHP 4 正式发布。
主要增加了以下特征:
- 各种web服务器的支持
- 丰富的数组操作函数
- 完整的会话机制
- 对输出缓存的支持
- 增加了对类和对象的支持,是 PHP 面向对象的雏形
尽管,PHP 发展势头之猛,但相比较其他语言如 Java 来说,还有很多问题。面向对象的支持不够完善,无法捕获异常(Exception)等,这导致多年以来 PHP 一直被认为是一门面向过程的语言(即使在 PHP 5 发布后)。2004年7月,PHP 5 正式发布,这标志着 PHP 一个新时代的到来。并且往后多年,PHP 一直在 5 这个版本上迭代,是 PHP 历时最长的一个大版本。
它的核心采用的是第二代 Zend 引擎,并引入了对 PECL 模块的支持。PHP 5 最大的特点是引入了面向对象的全部机制。
版本 | 发布日期 | 最终支持 | 相关更新及备注 |
---|---|---|---|
1.0 | 1995-06-08 | – | 首次使用 |
2.0 | 1996-04-16 | – | 针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。 |
3.0 | 1998-06-06 | 2000-10-20 | Zeev Suraski和Andi Gutmans重写了底层 |
4.0 | 2000-05-22 | 2001-06-23 | 增加了Zend引擎 |
4.1 | 2001-12-10 | 2002-03-12 | 加入了superglobal(超全局的概念,即 G E T 、 _GET、 GET、_POST等) |
4.2 | 2002-04-22 | 2002-09-06 | 默认禁用register_globals |
4.3 | 2002-12-27 | 2005-03-31 | 引入了命令行界面CLI用来不用CGI |
4.4 | 2005-07-11 | 2008-08-08 | 修复了一些致命错误 |
5.0 | 2004-07-13 | 2005-09-05 | ZendⅡ引擎 |
5.1 | 2005-11-24 | 2006-08-24 | 引入了编译器来提高性能、增加了PDO作为访问数据库的接口 |
5.2 | 2006-11-02 | 2011-01-06 | 默认启用过滤器扩展 |
5.3 | 2009-06-30 | 2014-08-14 | 支持命名空间;使用XMLReader和XMLWriter增强XML支持;支持SOAP ,延迟静态绑定,跳转标签(有限的goto), 闭包,Native PHP archives。 |
5.4 | 2012-03-01 | 2015-09-03 | 支持Trait、简短数组表达式。移除了register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister(), magic_quotes以及session_is_registered()。加入了内建的Web服务器。增强了性能,减小内存使用量。 |
5.5 | 2013-06-20 | 2016-07-10 | 支持generators,用于异常处理的finally ,将OpCache(基于 Zend Optimizer+)加入官方发布中。 |
5.6 | 2014-08-28 | 2018-12-31 | 常数标量表达式、可变参数函数、参数拆包、新的求幂运算符、函数和常量的use语句的扩展、新的phpdbg调试器作为SAPI模块,以及其他更小的改进 |
6.x | 未发布 | – | 取消掉的、从未正式发布的PHP版本。 |
7.0 | 2015-12-03 | 2018-12-03 | Zend Engine 3 (性能提升并在Windows上支持 64-bit 整数),统一的变量语法, 基于抽象语法树编译过程。 |
7.1 | 2016-12-01 | 2019-12-01 | void返回值类型,类常量,可见性修饰符 |
7.2 | 2017-11-30 | 2020-11-30 | 对象参数和返回类型提示、抽象方法重写等 |
7.3 | 2018-12-06 | 2021-12-06 | PCRE2支持等 |
7.4 | 2019-11-28 | 2022-11-28 | 改进OpenSSL、弱引用等 |
8.0 | 2020年 S4或2021年 S1 | 2023年 S4或2024年 S1 | JIT、数组负索引等 |
三、PHP特点
(一)开源性和免费性
由于PHP的解释器的源代码是公开的,所以安全系数较高的网站可以自己更改PHP的解释程序。另外,PHP 运行环境的使用也是免费的。
(二)快捷性
PHP是一种非常容易学习和使用的一门语言,它的语法特点类似于C语言,但又没有C语言复杂的地址操作,而且又加入了面向对象的概念,再加上它具有简洁的语法规则,使得它操作编辑非常简单,实用性很强。
(三)数据库连接的广泛性
PHP可以与很多主流的数据库建立起连接,如MySQL、ODBC、Oracle等,PHP是利用编译的不同函数与这些数据库建立起连接的,PHPLIB就是常用的为一般事务提供的基库。
(四)面向过程和面向对象并用
在PHP语言的使用中,可以分别使用面向过程和面向对象, 而且可以将PHP面向过程和面向对象两者一起混用,这是其它很多编程语言做不到的。
四、PHP优缺点
优点
(一)流行,容易上手
PHP是目前最流行的编程语言,这毋庸置疑。它驱动全球超过2亿多个网站,有全球超过81.7%的公共网站在服务器端采用PHP。PHP常用的数据结构都内置了,使用起来方便简单,也一点都不复杂,表达能力相当灵活。
(二)开发职位很多
在服务器端的网站编程中PHP会更容易帮助你找到工作。很多互联网相关企业都在使用PHP开发框架,所以可以说市场对PHP的开发程序员的需求还是比较大的。
(三)仍然在不断发展
PHP在不断兼容着类似closures和命名空间等技术,同时兼顾性能和当下流行的框架。版本是7之后,一直在提供更高性能的应用。
(四)可植入性强
PHP 语言在补丁漏洞升级过程中,核心部分植入简单易行,且速度快。
(五)拓展性强
PHP 语言在数据库应用过程中,可以从数据库调取各类数据,执行效率高
缺点
(一)PHP的解释运行机制
在 PHP 中,所有的变量都是页面级的,无论是全局变量, 还是[类的静态成员,都会在页面执行完毕后被清空。
(二)设计缺陷,缺少关注PHP被称作是不透明的语言,因为没有堆栈追踪,各种脆弱的输入。没有一个明确的设计哲学。早期的PHP受到Perl的影响,带有out参数的标准库又是有C语言引入,面向对象的部分又是从 C++和Java学来的。
(三)对递归的不良支持
PHP并不擅长递归。它能容忍的递归函数的数量限制和其他语言比起来明显少。