php底层运行机制与原理详解
11页1、phpphp 底层运行机制与原理详解底层运行机制与原理详解1 PHP 的设计理念及特点多进程模型:由于 PHP 是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,时代发展,PHP 也早已支持多线程模型。弱类型语言:和 C/C+、Java、C#等语言不同,PHP 是一门弱类型语言。一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在 web 开发中非常方便、高效。引擎(Zend)+组件(ext)的模式,降低内部耦合。中间层(sapi),隔绝 web server 和 PHP。语法简单灵活,没有太多规范。2 PHP 的核心架构PHP 核心架构如下图,从下到上可以简单分为四层体系:Zend 引擎:纯 C 实现,是 PHP 的内核部分,它将 PHP 代码翻译(词法、语法解析等一系列编译过程)为可执行 opcode 的处理并实现相应的处理方法、实现了基本的数据结构(如 hashtable、oo)、内存分配及管理、提供了相应的 api 方法供外部调用,是一切的核心,所有的外围功能均围绕 Zend 实现。金星棋牌
2、http:/Extensions:围绕着 Zend 引擎,extensions 通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如 array 系列)、标准库等都是通过 extension 来实现。Sapi:全称是 Server Application Programming Interface 服务端应用编程接口,Sapi 通过一系列钩子函数,使得 PHP 可以和外围交互数据,这是 PHP 非常优雅和成功的一个设计,通过 sapi 成功的将 PHP 本身和上层应用解耦隔离,PHP 可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。常见的一些 sapi 有:apache2handler:这是以 apache 作为 webserver,采用 mod_PHP 模式运行时候的处理方式,也是现在应用最广泛的一种。cgi:这是 webserver 和 PHP 直接的另一种交互方式,也就是大名鼎鼎的 fastcgi 协议,在最近今年 fastcgi+PHP 得到越来越多的应用,也是异步 webserver 所唯一支持的方式。cli:命令行调用的应用模
3、式上层应用:这就是我们平时编写的 PHP 程序,通过不同的 sapi 方式得到各种各样的应用模式,如通过 webserver 实现 web 应用、在命令行下以脚本方式运行等。3 PHP 的执行流程PHP 实现了一个典型的动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令 (opcodes),然后 ZEND 虚拟机顺次执行这些指令完成操作。PHP 本身是用 C 实现的,因此最终调用的也都是 C 的函数,实际上,可以把PHP 看成是一个 C 开发的软件。天地棋牌 http:/PHP 的执行的核心是翻译出来的一条一条指令,也即 opcode。Opcode 是 PHP 程序执行的最基本单位。一个 opcode 由两个参数(op1,op2)、返回值和处理函数组成。PHP 程序最终被翻译为一组 opcode 处理函数的顺序执行。常见的几个处理函数:ZEND_ASSIGN_SPEC_CV_CV_HANDLER : 变量分配 ( a=b)ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER:函数调用ZEND_CONCAT_SPEC_CV_CV_
4、HANDLER:字符串拼接 a.bZEND_ADD_SPEC_CV_CONST_HANDLER: 加法运算 a+2ZEND_IS_EQUAL_SPEC_CV_CONST:判断相等 a=1ZEND_IS_IDENTICAL_SPEC_CV_CONST:判断相等 a=14 Zend 引擎介绍Zend 引擎作为 PHP 的内核,有很多经典的设计机制,主要有以下几个:4.1 实现 HashTable 数据机构:HashTable 是 Zend 的核心数据结构。在 PHP 里面几乎用来实现所有常见功能,我们知道的 PHP 数组即是其典型应用,此外,在 zend 内部,如函数符号表、全局变量等也都是基于 hash table 来实现。Zend hash table 实现了典型的 hash 表散列结构,同时通过附加一个双向链表,提供了正向、反向遍历数组的功能。其结构如下图可以看到,在 hash table 中既有 key-value 形式的散列结构,也有双向链表模式,使得它能够非常方便的支持快速查找和线性遍历。散列结构:Zend 的散列结构是典型的 hash 表模型,通过链表的方式来解决冲突。需要注
《php底层运行机制与原理详解》由会员m****分享,可在线阅读,更多相关《php底层运行机制与原理详解》请在金锄头文库上搜索。
DB2发生死锁情况时应该怎么处理
Python 为何能成最强编程语言
面试前必须要知道的Redis面试
MySQL下自动删除指定时间以前的记录的操作方法
深入理解FastCGI协议以及在PHP中的实现
MySQL数据库性能优化之硬件瓶颈分析
NoSQL数据库大全收集整理
2018 – 2019 年前端 JavaScript 面试题
PHP文件包含漏洞的形式总结
5种使用Python代码轻松实现数据可视化的方法
改进JavaScript和Bust的互操作性:深入认识wasm-bindgen组件
C#图片缩放平移从功能分析到编码实现
详解网络蜘蛛的安全隐患及预防方法
利用NAP解除安全隐患自动隐藏你的IP地址
解决分布式数据库和离线网络中原子性问题的新方法
bbed恢复数据遇到延迟块清除的问题
Oracle Data Redaction数据加密
linux下du和df结果不一致的原因及处理
基于QMP实现对qemu虚拟机进行交互
解读Java并发队列BlockingQueue
2023-08-28 7页
2023-08-15 11页
2020-05-10 4页
2020-05-10 4页
2020-05-10 6页
2020-05-10 5页
2020-05-10 5页
2020-05-10 3页
2020-05-10 5页
2020-05-10 4页