PHP简介
PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。PHP同时支持面向对象和面向过程的开发,使用上非常灵活。发展历程
PHP是一个拥有众多开发者的开源软件项目,最开始是Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。PHP是在1994年由Rasmus Lerdorf创建的,最初只是一个简单的用Perl语言编写的统计他自己网站访问者数量的程序。后来重新用C语言编写,同时可以访问数据库,1995年,PHP(Personal Home Page Tools)对外发表第一个版本PHP1。此后,越来越多的网站开始使用PHP,并且强烈要求增加一些特性,如循环语句和数组变量等,1995年发布的PHP2加入了对mySQL的支持。Andi Gutmans和Zeev Suraski在为一所大学的项目中开发电子商务程序时发现PHP2功能明显不足,于是他们重写了代码发布了PHP3。PHP3是类似于现代PHP语法结构的第一个版本,PHP3的最强大的功能是它的可扩展性,PHP3的新功能和广泛的第三方数据库、API的支持使得这样程序的编写成为可能。
PHP3官方发布不久,Andi Gutmans和Zeev Suraski开始重新编写PHP代码。设计目标是增强复杂程序运行时的性能和PHP自身代码的模块性。经过不懈努力Zend引擎研发成功并且实现了设计目标,并在1999年中期引入 PHP。基于该引擎并结合了更多新功能的 PHP4于2000年5月正式发布。除了更高的性能以外,PHP4还包含一些关键功能,比如:支持更多的 web 服务器、HTTP Sessions 支持、输出缓冲、更安全的用户输入和一些新的语言结构。
PHP5于2004年7月正式发布,它的核心是Zend引擎2代(PHP7是Zend加强版3代),引入了新的对象模型和大量新功能,开始支持面向对象编程。随着PHP6经历长时间的开发流产后,PHP5发布了6个版本顽强的支撑着开源社区的发展,直到2015-12-03那天迎来了PHP 7.0的发布,其实PHP5.6已经包含了很多PHP6想实现的特性,它为PHP7的研发争取了宝贵的时间。不负众望PHP7.0对比PHP5.6性能整整提升了2倍,PHP7的成功发布让很多核心开发成员回归到PHP社区,并且在2020-11-26发布了PHP8。和php7系列相对比,PHP8对各种变量判断和运算采用更严格的验证判断模式,这点有利后续版本对jit的性能优化。
PHP语言作为一种高级语言,其特点是开源, 在设计体系上属于C语言体系,它可以让很多接受过高等教育的初学者能很快接受并完成入门学习,简单好上手容易找工作自然粉丝多。如果数据量大及访问压力大,可以集成redis、mysql分表分区分库、elasticsearch搜索引擎、消息队列写保护和php系统分布式集群部署等技术方案,缓解数据存储、服务访问和数据检索带来的巨大压力。
无论是大中小型项目,PHP都是一个十分适合的高级编程语言,是否适合就看项目研发团队的对它的掌握程度。 但是对于较大的和更为复杂的项目,最常见的php-fpm编程模式就显出它的薄弱了。针对PHP-fpm暴露出的一系列缺点问题,最简单靠谱的方案就是及时升级兼容PHP的高版本,PHP7.0.0 对比PHP5.6性能提升了2倍,另外PHP7.4提供的Preloading预加载机制 [11] 实现了部分程序常驻内存,获取了不错的性能提升,在PHP8又提供了高效的JIT (Just-In-Time即时编译) [12] 运算支持。另外水平更高的开发者可以转向难度更高的php-cli编程,它能解决大部分的系统性能问题,无论是PHP7和PHP8都支持这种模式的编程。
经过二十多年的发展,随着php-cli相关组件的快速发展和完善,PHP已经可以应用在 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等非 Web 领域的系统研发。
根据W3Techs2019年12月6号发布的统计数据,PHP在WEB网站服务器端使用的编程语言所占份额高达78.9% 。在内容管理系统的网站中,有58.7%的网站使用WordPress(PHP开发的CMS系统),这占所有网站的25.0%。
历史版本
版本 | 发布日期 | 最终支持 | 相关更新及备注 |
---|---|---|---|
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引擎,支持更多的 web 服务器、HTTP Sessions 支持、输出缓冲、更安全的用户输入和一些新的语言结构 |
4.1 | 2001-12-10 | 2002-03-12 | 加入了superglobal(超全局的概念,即$_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。php-fpm在php5.3.3 版本成为了官方正式组件 |
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模块,以及其他更小的改进。使用php://input替代 $HTTP_RAW_POST_DATA,iconv和mbstring配置选项中和编码相关的选项废弃。 |
6.x | 未发布 | -- | 取消掉的、从未正式发布的PHP版本。 |
7.0 | 2015-12-03 | 2018-12-03 | Zend引擎升级到三代 ,整体性能是5.6的2倍。移除ereg、mssql、mysql、sybase_ct等4个扩展。引入了类型声明,有两种模式: 强制 (默认) 和 严格模式。支持匿名类。 |
7.1 | 2016-12-01 | 2019-12-01 | void返回值类型,类常量,可见性修饰符,新增可为空(Nullable)类型,新增短数组语法([])的,支持多异常捕获处理,废弃了mcrypt 扩展用OpenSSL取代 |
7.2 | 2017-11-30 | 2020-11-30 | GD 扩展内的 png2wbmp() 和 jpeg2wbmp() 被废弃,对象参数和返回类型提示、抽象方法重写等 |
7.3 | 2018-12-06 | 2021-12-06 | 更灵活的 Heredoc 和 Nowdoc 语法,大小写不敏感的常量声明现被废弃,在字符串中搜索非字符串内容都将被视为字符串,而不是 ASCII 编码值。 |
7.4 | 2019-11-28 | 2022-11-28 | Preloading预加载机制,改进OpenSSL、弱引用等。属性添加限定类型、有限返回类型协变与参数类型逆变、数值文字分隔符,为过渡到PHP8做了一定的准备。 |
8.0.0 | 2020-11-26 | -- | JIT (Just-In-Time即时编译)、新增static返回类型、新增mixed 类型、命名参数(Named arguments)和注释(Attributes),不再允许通过静态调用的方式去调用非静态方法,字符串与数字的比较将首先将数字转为字符串再比较 |
参考框架
(一)CakePHPCakePHP 设计层面很优雅,没有自带多余的 library,所有的功能都是纯粹的框架,执行效率还不错。
(二)Hyperf
Hyperf 是一个基于Swoole 高性能、高灵活性的渐进式 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。
(三)ThinkPHP
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,最早诞生于2006年初,遵循Apache2开源协议发布。秉承简洁实用、出色的性能和至简的代码、注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
(四)Drupal
Drupal诞生于2000年 ,是一个基于PHP语言编写的开发型CMF(内容管理框架),即:CMS+ framework。Drupal的架构由三大部分组成:内核、模块、主题。三者通过Hook机制紧密的联系起来。可自由配置,能支持从个人博客到大型社区驱动的网站等各种不同应用的网站项目。
(五)easyswoole
EasySwoole是一款常驻内存型的国产分布式swoole框架,支持同时混合监听HTTP、WebSocket、自定义TCP、UDP协议,且拥有丰富的组件,例如协程 连接池、协程Kafka客户端、协程ElasticSearch客户端、、协程Redis客户端、协程自定义队列、 协程Memcached客户端、协程HTTP客户端、Crontab定时器等。
(六)Laravel
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个不错的网络APP,而且每行代码都可以简洁、富于表达力。
(七)imi
它可以运行在 PHP-FPM、Swoole、Workerman 多种容器环境下