商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 详解PHP

详解PHP

  发布于2026-07-20 阅读(0)

扫一扫,手机访问

PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。它的语法学习了C语言,吸纳了Ja va和Perl等多个语言的特色,逐渐发展出自己的风格,并且持续改进——比如Ja va的面向对象编程就被很好地融合了进来。当初创建PHP的主要目标,就是让开发人员能快速写出优质的Web网站。[1][2] 它同时支持面向对象和面向过程的开发,用起来非常灵活。

软件名称:PHP
软件平台:Windows、Linux、Unix、macOS等
上线时间:1995年
最近更新时间:2021年7月1日
软件语言:PHP

发展历程

PHP是一个拥有众多开发者的开源软件项目,最初是Personal Home Page的缩写,后来正式更名为“PHP: Hypertext Preprocessor”。1994年,Rasmus Lerdorf为了统计自己网站访问者数量,用Perl写了个简单程序,这就是PHP的雏形。后来他用C语言重新编写,并加入了数据库访问功能。1995年,PHP(Personal Home Page Tools)对外发布了第一个版本PHP1。之后,越来越多的网站开始使用PHP,用户强烈要求增加循环语句、数组变量等特性,于是在1995年发布的PHP2中加入了MySQL的支持。

Andi Gutmans和Zeev Suraski在为大学项目开发电子商务程序时,发现PHP2功能明显不足,于是重写了代码,发布了PHP3。PHP3是第一个具有现代PHP语法结构的版本,它最强大的地方在于可扩展性——新增的功能和广泛的第三方数据库、API支持,让各种程序的编写成为可能。

PHP3发布不久,Andi Gutmans和Zeev Suraski又开始重新编写PHP代码,目标是增强复杂程序运行时的性能和代码的模块化。经过不懈努力,Zend引擎研发成功,并于1999年中期引入PHP。基于该引擎,并结合更多新功能的PHP4于2000年5月正式发布。除了更高的性能,PHP4还包含一些关键功能:支持更多Web服务器、HTTP Sessions支持、输出缓冲、更安全的用户输入,以及一些新的语言结构。

PHP5于2004年7月正式发布,核心是Zend引擎2代(PHP7是Zend加强版3代),引入了新的对象模型和大量新功能,开始支持面向对象编程。PHP6经历了一段漫长的开发流产后,最终被放弃,但PHP5.6已经包含了很多PHP6想实现的特性,为PHP7的研发争取了宝贵时间。2015年12月3日,PHP 7.0发布,性能相比PHP5.6整整提升了2倍,这一成功让很多核心开发成员回归社区。2020年11月26日,PHP8发布。与PHP7系列相比,PHP8对各种变量判断和运算采用了更严格的验证模式,这为后续版本的JIT性能优化打下了基础。

PHP作为一种高级语言,最大的特点是开源,在设计上属于C语言体系。这让很多接受过高等教育的初学者能很快上手,入门简单、容易找工作,自然粉丝众多。如果数据量大、访问压力大,可以集成Redis、MySQL分表分区分库、Elasticsearch搜索引擎、消息队列写保护以及PHP系统分布式集群部署等技术方案,来缓解数据存储、服务访问和数据检索的压力。

无论是大中小型项目,PHP都是一个非常合适的高级编程语言,关键就看项目团队对它的掌握程度。但对于较大、较复杂的项目,最常见的php-fpm编程模式就暴露出一些薄弱之处。针对这些问题,最简单靠谱的方案就是及时升级到兼容的高版本——PHP7.0相比PHP5.6性能提升了2倍,PHP7.4提供的Preloading预加载机制实现了部分程序常驻内存,获得了不错的性能提升,PHP8又提供了高效的JIT(Just-In-Time即时编译)支持。另外,水平更高的开发者可以转向难度更高的php-cli编程,它能解决大部分系统性能问题,PHP7和PHP8都支持这种模式。

经过二十多年的发展,随着php-cli相关组件的快速发展和完善,PHP已经可以应用在TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等非Web领域的系统研发中。

根据W3Techs 2019年12月6日发布的统计数据,PHP在Web网站服务器端使用的编程语言中所占份额高达78.9%。在内容管理系统的网站中,有58.7%的网站使用WordPress(PHP开发的CMS系统),这占所有网站的25.0%。

语言特点

开源免费

PHP是一个受众巨大、拥有众多开发者的开源软件项目。Linux + Nginx + MySQL + PHP是它的经典部署方式,相关软件全部开源免费,使用PHP可以省下大笔正版授权费用。不过,作为开源软件,PHP缺乏大型科技公司的支持背景,网络上唱衰的声音经久不衰。但它的持续迭代和性能持续增强的现实却鼓舞人心,PHP社区用实际行动给出了强有力的回击。

快捷高效

PHP的内核由C语言编写,基础好、效率高,可以用C语言开发高性能的扩展组件。核心内置函数超过1000个,功能应有尽有,开箱即用,代码简洁。PHP数组支持动态扩容,支持数字、字符串或混合键名的关联数组,大幅提升开发效率。作为一门弱类型语言,编译通过率高,相比其他强类型语言开发效率快。此外,PHP天然支持热部署——在php-fpm模式下,代码文件覆盖即完成热部署。经过20多年发展,互联网上可以搜到海量参考资料供学习参考。

性能提升

PHP版本越高,整体性能越强。根据官方介绍,PHP 7.0.0对比PHP5.6性能提升了2倍,PHP7.4比PHP7.0快了约30%,PHP8.0在性能上又相对PHP7.4改进了大约10%。PHP 8.0引入了JIT编译器特性,同时加入了命名参数、联合类型、注解、Constructor Property Promotion、match表达式、nullsafe运算符,以及对类型系统、错误处理和一致性的改进。PHP拥有自己的核心开发团队,保持5年一个大版本、1个月更新2个小版本的频率,最新的版本是PHP 8.0.8。PHP 7.0.0发布于2015年12月3日,此版本下最新版本是PHP 7.4.21(2021年7月1日);PHP 8.0.0发布于2020年11月26日,此版本下最新版本是PHP 8.0.8(2021年7月1日)。

跨平台

每个平台都有对应的PHP解释器版本,针对不同平台编译出目标平台的二进制码(PHP解释器)。PHP开发的程序可以不经修改,运行在Windows、Linux、Unix等多个操作系统上。

常驻内存

php-cli模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存中实现资源复用。比较常用的做法是结合Swoole组件编写CLI框架。

页面生命周期

在php-fpm模式下,所有变量都是页面级的——无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空。这种模式对程序员水平要求低,占用内存非常少,特别适合中小型系统的开发。

运行机制

PHP常见的运行模式有两种:php-fpm和php-cli。当PHP运行在php-fpm模式下,所有变量都是页面级的,执行完毕后被清空。运行在php-cli模式下,程序可以常驻内存,各种变量和数据库连接都能长久保存在内存中实现资源复用,性能得到很大提升。php-cli虽然开发比较复杂,但能获得更高的性能,对开发者要求较高,比较常用的做法是结合Swoole组件编写CLI框架,各种变量能保存在跨进程的高性能共享内存Table中,可以开发出支持热启动的php-cli可靠应用系统。

php-fpm在PHP 5.3.3版本(2010年7月22日)成为官方正式组件。它提供了稳定可靠的进程管理服务——进程不足时智能扩充,闲置时自动回收销毁多余进程,同时对程序的容错能力很强,运行非常稳定,可以应付企业级开发需求。php-fpm能很好地处理通过HTTP/HTTPS等TCP/IP协议进行的用户输入输出,页面级生命周期各种资源用完即释放,不存在内存泄漏问题。php-fpm也提供一些常驻内存的技术支持,例如PHP 7.4引入的opcache.preload能实现局部PHP类和函数的常驻内存,不过这个方法不够灵活,和服务器配置捆绑得太死。

php-cli因为能实现各类资源的常驻内存,所以可以资源复用,更高效地完成多进程编程和异步编程,开发出负载能力更高的应用系统。但相比php-fpm的简单编程,开发者需要注意很多事项,并做很多附加的控制器开发,否则无法实现期待中的高性能。

首先,开发者需要实现可靠的进程管理服务,保证系统进程遇到各类错误退出后能自动创建新进程,这样才能保证后续服务请求有足够空闲进程可分配。每个业务代码段都要做异常处理,让进程遇到非致命错误时不会退出——因为进程重启意味着程序和各类资源需要再次加载,这个过程的性能消耗不小。只有进程稳定运行,常驻内存才有意义。

其次,因为常驻内存,编写的新程序必须重启服务才能生效,这一点习惯了fpm模式的开发者会感到陌生。另外,开发者需要手工释放内存,否则系统长时间运行后会出现内存泄漏。同时在CLI模式下,不能像fpm里直接用$_SERVER、$_POST、$_GET、$_COOKIE和$_FILES进行编程,需要自己去解析各种互联网通讯协议完成用户的输入输出。要实现多进程编程利用多核CPU计算,还要学习使用pcntl和posix编程,这里涉及异步编程逻辑,难度较大。比较常用的做法是结合Swoole组件编写CLI框架。

PHP是一个活跃的社区开发语言,有专业的核心开发团队在持续不断地迭代,最新版本PHP 8.0.8引入了很多新特性。

参考框架

(一)WordPress内容管理系统(CMS)

功能强大、扩展性强,易于扩充功能;搭建的博客对SEO搜索引擎友好,收录快、排名靠前;网站主题丰富,各色各样应有尽有;有强大的社区支持,上千万的开发者贡献和审查代码。

(二)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定时器等。

(六)Lara vel

Lara vel是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码中解脱出来,帮你构建一个不错的网络APP,而且每行代码都可以简洁、富于表达力。

(七)CakePHP

CakePHP设计层面很优雅,没有自带多余的library,所有功能都是纯粹的框架,执行效率还不错。

(八)imi

它可以运行在PHP-FPM、Swoole、Workerman多种容器环境下。

语言参考

内置函数

PHP有很多标准的函数和结构。还有一些函数需要和特定的扩展模块一起编译,否则在使用它们时就会得到一个致命的“未定义函数”错误。例如,要使用image函数中的imagecreatetruecolor(),需要在编译PHP时加上GD的支持;要使用mysqli_connect()函数,就需要在编译PHP时加上MySQLi支持。很多核心函数已包含在每个版本的PHP中,如字符串和变量函数。调用phpinfo()或get_loaded_extensions()可以得知PHP加载了哪些扩展库。同时,很多扩展库默认就是有效的。

在PHP编程中,用户输入安全非常重要,对用户各个方面的输入都要做好过滤处理。内置函数里提供了不少安全相关的函数,编程学习者需要重点掌握以下7个重点函数:

  • htmlentities — 将字符转换为HTML转义字符
  • htmlspecialchars_decode — 将特殊的HTML实体转换回普通字符
  • htmlspecialchars — 将特殊字符转换为HTML实体
  • nl2br — 在字符串所有新行之前插入HTML换行标记
  • str_replace — 子字符串替换
  • strip_tags — 从字符串中去除HTML和PHP标记
  • stripslashes — 反引用一个引用字符串

预定义变量对于全部脚本而言,PHP提供了大量的预定义变量。这些变量将所有的外部变量表示成内建环境变量,并将错误信息表示成返回头。在PHP编程中经常需要用到的预定义变量如下:

$GLOBALS — 引用全局作用域中可用的全部变量
$_SERVER — 服务器和执行环境信息
$_GET — HTTP GET 变量(用户输入之一)
$_POST — HTTP POST 变量(用户输入之一)
$_FILES — HTTP 文件上传变量
$_SESSION — Session 变量(用户会话)
$_COOKIE — HTTP Cookies(用户会话标识)

数据类型

PHP支持10种原始数据类型。四种标量类型:bool(布尔型)、int(整型)、float(浮点型,也称作double)和string(字符串);四种复合类型:array(数组)、object(对象)、callable(可调用)和iterable(可迭代);最后是两种特殊类型:resource(资源)和NULL(无类型)。

运算符

运算符是通过给出一个或多个值(表达式)来产生另一个值(从而整个结构构成一个表达式)的东西。PHP的运算符包含:运算符优先级、算术运算符、赋值运算符、位运算符、比较运算符、错误控制运算符、执行运算符、递增/递减运算符、逻辑运算符、字符串运算符、数组运算符和类型运算符。

流程控制

任何PHP脚本都是由一系列语句构成的。一条语句可以是一个赋值语句、一个函数调用、一个循环、一个条件语句,甚至是一个什么也不做的空语句。语句通常以分号结束,此外还可以用花括号将一组语句封装成一个语句组,语句组本身可以当作是一行语句。

类与对象

每个类的定义都以关键字class开头,后面跟着类名,再后面跟着一对花括号,里面包含类的属性与方法的定义。类名可以是任何非PHP保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母、数字或下划线。以正则表达式表示为:^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$。一个类可以包含属于自己的常量、变量(称为“属性”)以及函数(称为“方法”)。要创建一个类的实例,必须使用new关键字。当创建新对象时,该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。类应在被实例化之前定义(某些情况下则必须这样)。如果在new之后跟着的是一个包含有类名的字符串,则该类的一个实例被创建。如果该类属于一个命名空间,则必须使用其完整名称。

命名空间

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码(如类或函数)时碰到的两类问题:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突,以及为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建别名(或简短)的名称,提高源代码的可读性。PHP命名空间提供了一种将相关的类、函数和常量组合到一起的途径。

【参考资料出处:百度百科】

本文转载于:https://blog.csdn.net/2302_76241188/article/details/130256842 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注