《细说PHP》 第四版 样章 第二章 PHP的应用与发展 4
2.4 PHP的发展
最初创建时,PHP是一个简单的用Perl语言编写的程序,只是为了统计自己的网站有多少访问者。后来又用C语言重新编写,多年来,PHP经过无数开源贡献者的不断迭代,历经数个版本,已经成为当前最热门的Web开发语言。像Facebook、淘宝等早期都是用PHP写的,在中国,PHP在百度、新浪、腾讯等大型互联网公司中应用都比较多。
2.4.1 PHP的诞生
1994年丹麦人Rasmus Lerdorf(雷斯莫斯·勒道夫)创建了PHP,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。他给这一套脚本取名为“Personal Home Page Tools”。后来他又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools(PHP Tools)开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。
在这个早期的版本中,只提供了像访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性,比如循环语句和数组变量等。
2.4.2 PHP的迭代过程
PHP从诞生到现在已经有20多年的历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷,Node.js、Go、Python不断地在挑战PHP的地位。PHP语言之所以能有今天的地位,得益于其设计者一直遵从实用主义,将技术的复杂性隐藏在底层。PHP一直在积极地维护和升级,虽然每个语言都有缺点,有些公司或开发者喜新厌旧地尝试各种新语言,而全球仍然有成千上万的PHPer的力量支持PHP,并且有Zend公司进行背书,PHP 必定也会与时俱进地迭代和打磨。到现在的PHP 7版本,开发组对性能要求极致的理念,对其进行了翻天覆地的更新就已经证明了这一点。PHP的迭代历程如下。
Ø 第2版用C语言重写并命名为PHP/FI
在1995年年中,新的成员加入开发行列,PHP 2.0发布了。第2版定名为PHP/FI(Form Interpreter)。PHP/FI加入了对数据库mSQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年年底,有1.5万多个网站使用PHP/FI;到1997年,PHP/FI 2.0也就是它的C语言实现的第2版在全世界已经有几千个用户和大约5万个域名安装,大约是所有域名的1%。但是那时只有几个人在为该项目撰写少量的代码,它仍然只是一个人的工程。PHP/FI 2.0 在经历了数个 beta 版本的发布后,于1997年11月发布了官方正式版本。
Ø 两位以色列开发者加入并重新命名PHP3
而在1997年中,开始了第3版的开发计划,两位以色列人Andi Gutmans和Zeev Suraski在为一所大学的项目中开发电子商务程序时发现 PHP/FI 2.0 功能明显不足,于是他们重写了代码。经过Rasmus,Andi和Zeev一系列的努力,考虑到 PHP/FI 已存在的用户群,他们决定联合发布PHP 3.0作为PHP/FI 2.0的官方后继版本,而第3版就直接定名为PHP 3.0。而 PHP/FI 2.0 的进一步开发几乎终止了。PHP 3.0是类似于当今PHP语法结构的第一个版本,一个最强大的功能是它的可扩展性。除了给最终用户提供数据库、协议和API的基础结构,它的可扩展性还吸引了大量的开发人员加入并提交新的模块。后来证实,这是PHP 3.0取得巨大成功的关键。PHP 3.0 中的其他关键功能包括面向对象的支持和更强大和协调的语法结构。这个全新的语言伴随着一个新的名称发布,它从PHP/FI 2.0的名称中移去了暗含“本语言只限于个人使用”的部分,它被命名为简单的缩写“PHP”。这是一种递归的缩写,它的全称是——PHP: Hypertext Preprocessor。约9个月的公开测试后,官方于1998年6 月正式发布PHP 3.0。
PHP 3.0跟Apache服务器紧密结合的特性,加上它不断地更新及加入新的功能;它几乎支持所有主流与非主流数据库;高速的执行效率,使得PHP在1999年中的使用网站超过了15万。这时PHP的源代码完全公开,在“开源”意识增长的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX、Linux或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。
Ø 引入“Zend 引擎”并成立了Zend公司
1998年的冬天,PHP 3.0 官方发布不久,Zeev Suraski和Andi Gutmans 开始重新编写 PHP 代码。设计目标是增强复杂程序运行时的性能和PHP自身代码的模块性。PHP 3.0的新功能和广泛的第三方数据库、API的支持使得这样程序的编写成为可能,但是PHP 3.0没有高效处理如此复杂程序的能力。
新的被称为“Zend”(这是Zeev和And 的缩写)的引擎,成功地实现了设计目标,并在 1999 年年中首次引入 PHP。由Zeev和Andi两个人创建了Zend公司,由于他们的国际技术的权威性,Zend公司和他的创建者在PHP以及开源团体中持续处于领导的核心地位,对于PHP的迅猛发展起到了强有力的推动作用。
基于Zend引擎并结合了更多新功能的 PHP 4.0,于2000年5月发布了官方正式版本。整个脚本程序的核心大幅改动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统 CGI 或者 ASP 等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。除了更高的性能以外,PHP 4.0 还包含了其他一些关键功能,例如支持更多的 Web 服务器、HTTP Sessions 支持、输出缓冲、更安全地处理用户输入的方法、一些新的语言结构等。
Ø 从PHP 5开始支持面向对象
PHP 5经过长时间的开发及多个预发布版本后,于2004年7月发布正式版本。其核心是Zend引擎2代,引入了新的对象模型和大量新功能,可以使用面向对象的思想进行编程,这也是PHP在编程领域的又一个新的突破。虽然PHP 5.0没有带来实质性的性能提升,并且在某些情况下甚至比PHP 4更慢,一个由Dmitry Stogov 领导的团队在社区的大力帮助下已经在后续版本中不断优化语言,在 PHP 5.6 发布的时候,在大多数情况下,性能提升在1.5和3倍之间。
Ø 其实PHP 6是个失败的版本
PHP 6的开发开始于2005年,曾想要让PHP支持Unicode字符串。由于PHP 6的开发进展过于缓慢又出现了很多的问题,并且开发停滞不前,导致PHP 6在2010年被取消了。其实PHP 6很少有人用过,在没有新的版本出现之前,还一直在使用PHP 5。
Ø 寄希望于下一代的PHP NG分支
由于PHP 6的分支被占用了,不久后Zend的Dmitry Stogov发布了PHP的一个名为PHPNG(PHP Next-Gen)的分支。PHP NG(也可称为PHP 5.7)关键是仍保持对PHP 5.6的兼容性,在2014年1月中旬首次发布,并在同年5月初又再次进行里程碑式的更新,并对PHP速度的提升有着越来越多的思路。到了同年7月中旬,这些努力终于有了结果,测试表明开发中的版本性能对比PHP 5.6有着近乎1倍的提升。在渲染 WordPress 3.6前端页面上进行的测试,同样的页面,PHP 5.6渲染1000次耗时26.756秒,而PHP NG耗时14.810秒。此次性能提升的秘诀在于将近60%的CPU指令被替换成更高效的代码。PHP 5.6执行100次渲染需要9 413 106 833个CPU指令,而PHP NG 只需3 627 440 773 指令。
2.4.3 PHP的现在
现在是PHP 7的时代,2015年12月PHP 7.0版本的发布取得了重大突破,同时将带来大幅的性能改进和新的特性,以及改进一些过时的功能。该发布版本将会专注在性能加强,源自PHP版本树中的PHP NG分支。到本书发稿时,PHP 7有3个功能版本,分别是7.0.x,7.1.x,7.2.x,目前新开发的PHP项目都已经开始使用PHP 7这个版本。相对于之前的版本主要是性能上进行了提升,官方公布的数据性能可以提升一倍,PHP 7.1.x更多地是对7.0.x未完成的工作的一个补充,做的最大的改进就是增加了一个类型推断系统加一个类型相关的中间代码执行引擎。目前的最高版本是PHP 7.2.x,相对于 PHP 7.1.x版本主要优化是在 OPcache(通过将 PHP 脚本预编译的字节码存储到共享内存中,以此来提升 PHP 的性能,存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销,在PHP 5.5以后的版本引入)。
2.4.4 PHP的未来
作为老牌的Web后端编程语言,PHP在全球市场的占有率非常高,仅次于Java,从各个招聘网站的数据上来看PHP 开发的职位非常多,薪资水平也非常不错。实际在中小企业、互联网创业公司,PHP的市场地位是高于Java的。Java在超大型企业、传统软件行业、金融领域的优势更大。目前来看,Node.js、Go、Python、Ruby 等语言还难以企及PHP和Java。在Web开发中PHP是王者,现在应用终端多方面发展,互联网用户爆发式增长,如今不否认PHP 在有些地方存在欠缺,比如微服务的构建、常驻内存的服务级系统、密集计算、大数据的生态构建等。
PHP语言入门简单,容易掌握,程序健壮性好,不容易出现像Java、C++等其他语言那样复杂的问题。PHP官方提供的标准库非常强大,各种功能函数都能在官方的标准库中找到,包括MySQL、Memcache、Redis、GD图形库、CURL、XML、JSON等,免除了开发者到处找库的烦恼。PHP的文档非常棒,每个函数都有详细的说明和使用示例。第三方类库和工具、代码、项目也很丰富。开发者可以快速、高效地使用PHP编写和开发各类软件。到目前为止,市面上仍然没有出现过比PHP更简单易用的编程语言。所以PHP的前景还是很广阔的,与其纠结于编程语言的选择,不如好好地深入学习使用PHP。


《细说PHP》 第四版 样章 第二章 PHP的应用与发展 4的更多相关文章
- 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1
<细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...
- 《C++Primer》第五版习题答案--第二章【学习笔记】
C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...
- Linux第一章第二章学习笔记
第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...
- Windows程序设计(第五版)学习:第二章 Unicode简介
第二章 Unicode简介 1,Windows通过双字节技术DBCS解决这个问题,代码页定义不同的字符集,称为ANSI字符集,比如日文为CP932,韩文为CP949,繁体中文为CP950,简体中文为C ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
- CSS3秘笈复习:第一章&第二章&第三章
第一章: 1.<cite>标签不仅可以将网页设置为斜体,还能给标题做上标记,使它便于被搜索引擎搜索到. 第二章: 1.import指令链接样式表: CSS本身有一种添加外部样式的方法:@i ...
- Practical Vim 第一章 & 第二章
第一章:Vim 解决问题的方式 前言 本质上讲,我们的工作是重复性的.凡是可以简化重复性操作的方式,都会成倍地节省我们的时间. Vim 对重复性操作进行了优化.它之所以能高效地重复,是因为它会记录我们 ...
- Linux内核设计与实现 第一章 第二章
第一章 Linux内核简介 Unix特点: (1) Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2) 在Unix中,所有的东西都被当作文件对待,通过一套相 ...
- 《细说PHP》 第四版 样章 第二章 PHP的应用与发展 5
2.5 如何学习PHP PHP以其简单易学的特点,以及敏捷开发的优势,从一个几乎不被人知的开源项目,慢慢成长为技术人员首选的动态Web设计工具,与其他语言相比,PHP表现得更好.更快.更简单易学.尽 ...
随机推荐
- 对Windows桌面应用程序进行UI自动化测试
题记:本文简述如何利用appium对Windows桌面应用程序进行UI自动化测试. 所谓UI自动化测试,就是模拟一个用户,对应用程序的UI进行操作,以完成特定场景的功能性集成测试. 要对Windows ...
- [洛谷P4942][题解]小凯的数字
这题打着高精的旗号其实是闹着玩的……(我不是题目) 数据范围就是提示你这题O(1)的 我们知道,一个数膜9的余数等于它数字和膜9的余数 我们可以把l到r加起来然后膜9 也就是(l+r)(r-l+1)/ ...
- WPF 中 Path 使用虚线
效果如下: 上图由两个圆弧组成,代码如下: <!--红色的实线圆弧,旋转200度,顺时针,获取大圆弧--> <Path Data="M 50,200 A 100,100 2 ...
- 用 Python 图像识别打造一个小狗分类器
项目介绍 小狗分类器可以做什么? 通过这个分类器,你只需要上传照片,就可以得到小狗的品种,以及更多的信息. 这就是所谓的「机器学习」,让机器自己去“学习”.我们今天要做的这个分类任务,是一个“监督 ...
- Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控
本文概要:大白话剖析调用链监控原理,然后学习Sleuth,Zipkin,然后将Sleuth整合Zipkin,最后学习Zipkin数据持久化(Elasticsearch)以及Zipkin依赖关系图 实战 ...
- libwebrtc & libmediasoupclient编译
本文简单介绍在Ubuntu下libwebrtc的编译过程. 由于网速限制,实际编译过程是在远程vps上编译滴. 系统环境 Ubuntu 18.04系统的虚拟主机. root@vultr:~# pwd ...
- Java堆空间Vs栈内存
之前我写了几篇有关Java垃圾收集的文章之后,我收到了很多电子邮件,请求解释Java堆空间,Java栈内存,Java中的内存分配以及它们之间的区别. 您可能在Java,Java EE书籍和教程中看到很 ...
- 浏览器及Windows常用快捷键汇总
浏览器常用快捷键: F5 刷新 Ctrl+N 打开新窗口 Ctrl+T 打开新标签 Ctrl + O 打开浏览器的时候打开文件 Ctrl+Shift+N 隐身模式打开窗口 F2 F3 切换 Ct ...
- Linux系统:常用Linux系统管理命令总结
本文源码:GitHub·点这里 || GitEE·点这里 一.目录指令 1.创建目录make directory mkdir 目录名称 //mkdir spring,创建一个spring文件夹 mkd ...
- Vim 宏实战操作
宏的概念 什么是宏呢?英文名:macro,代表一串命令的集合. 示例操作文本 SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`u ...