PHP架构及原理知识点详解


Posted in PHP onDecember 22, 2019

记得我刚开始学习PHP的时候,许多面试官会经常问我PHP是什么,那时的标准回答是PHP是一种弱类型动态脚本编程语言,开源,

免费,是超文本预处理器的缩写。

这只是很浅的解释,PHP对我来说是一个工具,是我手里的一把锤子,虽然这把锤子时常被调侃为两边都是起钉器的锤子。

多进程模型

PHP是以多进程模型设计的,这样的好处是请求之间互不干涉,一个请求失败也不会对其他进程造成影响,作为最开始仅仅用于个人网站的一个工具集这样的设计并没有什么不妥,随着PHP的应用变大,访问量增加这种方式显然是不合适的,因为启动一个进程的开销对于海量请求是不划算的,所以现在PHP基本都是运行在PHP-FPM的管理下的,这是一个PHP进程管理器,它常驻内存启动一些PHP进程待命,当请求进入时分配一个进程进行处理,PHP进程处理完毕后回收进程,但并不销毁进程,这让PHP也能应对高流量的访问请求。

当然现在也有PHP多线程的解决方案和基于协程的解决方案让PHP更高效的处理WEB请求。

弱类型

与 JAVA、C/C++ 不同,PHP是一门若类型的语言,变量在声明的那一刻是不需要确定它的类型的,而在运行时类型也会发生显式或隐式的类型改变,这也是PHP开发应用迅速、方便的原因之一。

其他

Zend 引擎 + Ext 扩展 的模式降低了内部耦合,可以方便的为PHP本身增加功能和去除功能。

语法简单,没有太多强制规范,编程风格上既可以用过程式、也可以用面向对象的方式进行开发,当然函数式也可以。

以目前的 PHP 主流版本 PHP7 和 PHP5 来说架构是如上图所示,主要有四层体系构成,从下到上依次是 Zend 引擎、Extensions 扩展、SAPI 接口、上层应用。

Zend 引擎

Zend 引擎是 PHP4 以后加入 PHP 的,是对原有PHP解释器的重写,整体使用 C 语言进行开发,也就是说可以把PHP理解成用C写的一个编程语言软件,引擎的作用是将PHP代码翻译为一种叫opcode的中间语言,它类似于JAVA的ByteCode(字节码)。

引擎对PHP代码会执行四个步骤:

词法分析 Scanning(Lexing),将 PHP 代码转换为语言片段(Tokens)。解析 Parsing, 将 Tokens 转换成简单而有意义的表达式。编译 Compilation,将表达式编译成Opcode。执行 Execution,顺序执行Opcode,每次一条,以实现PHP代码所表达的功能。

APC、Opchche 这些扩展可以将Opcode缓存以加速PHP应用的运行速度,使用它们就可以在请求再次来临时省略前三步。

引擎也实现了基本的数据结构、内存分配及管理,提供了相应的API方法供外部调用。

Extensions 扩展

常见的内置函数、标准库都是通过extension来实现的,这些叫做PHP的核心扩展,用户也可以根据自己的要求安装PHP的扩展。

SAPI

SAPI 是 Server Application Programming Interface 的缩写,中文为服务端应用编程接口,它通过一系列钩子函数使得PHP可以和外围交换数据,SAPI 就是 PHP 和外部环境的代理器,它把外部环境抽象后,为内部的PHP提供一套固定的,统一的接口,使得 PHP 自身实现能够不受错综复杂的外部环境影响,保持一定的独立性。

通过 SAPI 的解耦,PHP 可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。

上层应用

程序员编写的PHP程序,无论是 Web 应用还是 Cli 方式运行的应用都是上层应用,PHP 程序员主要工作就是编写它们。

总结

这些东西如果你学习过 android 开发理解起来显然更容易,因为android的架构和PHP的这种架构看起来很相似。当你理解这些后你就会理解为什么PHP的创始人会说PHP开发其实是不需要框架的,因为PHP的设计本身就是一个类似框架的东西,如果用汽车比喻的话PHP本身就是就是车的骨架,Zend的是引擎,Ext是轮子,方向盘等车的组件,SAPI 就是路。

对于这些内容,可能有的人觉得有点无用,因为很多人偏执的认为自己只是个开车的,为什么开车的要了解车子是怎么跑起来的,对于了解如何制造一辆车更是嗤之以鼻。我曾经也这样认为,直到翻译Laravel文档时,Laravel 的作者给了我一些启发,也把这些话送给看到这个文章的你们:

使用「现实世界」中的任何工具时,如果理解这个工具的运作原理,那么你会更加得心应手的使用这个工具。应用开发也是这样。当你明白你的开发工具如何运行的,你就会对它们的使用游刃有余。

这篇文档的目的是让你更好的理解 Laravel 框架如何进行工作及它的工作原理。通过对框架进行全面的了解,一切都不会那么「神奇」,也将会让你更有自信的构建你的应用。

以上就是PHP是什么-PHP的架构及原理概述的详细内容,感谢大家的学习和对三水点靠木的支持。

PHP 相关文章推荐
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
有关PHP性能优化的介绍
Jun 20 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php根据生日计算年龄的方法
Jul 13 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
在Laravel中使用MongoDB的方法示例
Nov 11 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
Laravel 验证码认证学习记录小结
Dec 20 #PHP
php文件上传原理与实现方法详解
Dec 20 #PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 #PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 #PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 #PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 #PHP
Laravel框架处理用户的请求操作详解
Dec 20 #PHP
You might like
php设计模式之单例模式使用示例
2014/01/20 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
JavaScript事件 "事件对象"的注意要点
2016/01/14 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python实现排序算法
2014/02/14 Python
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python实现新浪博客备份的方法
2016/04/27 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
长青弘远的面试题
2012/06/09 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
表彰会主持词
2014/03/26 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书