当前位置:

首页 > 编程开发 > 详解PHP

详解PHP

本文目录

    PHP是一种服务器端脚本语言,开源免费,语法借鉴C语言并融合Java等特色,支持面向对象与面向过程。1994年诞生,历经多个版本迭代,PHP7和PHP8性能显著提升,尤以PHP7.0较5.6提升2倍。广泛应用于Web开发,占服务器端编程语言78.9%份额,支持跨平台及常驻内存模式。

    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命名空间提供了一种将相关的类、函数和常量组合到一起的途径。

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

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发 PHP
    相关文章 更多
    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。