ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:77.54KB ,
资源ID:24916060      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24916060.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PHP的底层实现.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PHP的底层实现.docx

1、PHP的底层实现PHP的底层实现PHP代码的执行过程:编译型语言:对于C语言,C+, 编译成机器码(二进制)来运行.java语言, 把.java编译成 .class,称为bytecode, 由jvm来运行.解释语言:解释器解释执行. 典型的如 linux shell.解释器逐行来执行命令.PHP稍有特殊之处,虽然是一个脚本语言,但不是靠解释器解释.而是 zend 虚拟机,屏蔽了操作系统的区别.php代码编译成opcode, 由zend虚拟机来执行opcode.但是-opcode, PHP脚本一结束,opcode就清除了.思考:opcode能否缓存? PHP本身不支持,但是apc,xcache等

2、加速器,实现了这样的效果.PHP底层用C语言来实现的,C语言是强类型,而PHP是弱类型语言.是如何实现的呢?PHP变量的底层实现:我们解压PHP的源码包, 看到如下的目录其中,最核心的-Zend目录, 这是zend虚拟的实现. 包括栈,数据类型,编译器等,都在这实现.最主要的main -PHP的一些内建函数,最主要函数都在这里放着.最大的一个目录 ext - PHP的扩展.PHP的大部分功能,都是以extenstion形式来完成的.如果你开发了一个扩展,也放在ext目录下. Zend对变量的表示:答: zend实现了 zval结构体value: 联合体 ,联合体的内容可能是C语言中的long,

3、double,hashtable.type: 变量类型 , IS_NULL,IS_BOOL,IS_STRING. IS_RESOURCErefcount_gcis_ref_gc 如:$a = 3;value : long lval = 3type: IS_LONG$a = 3.5value: double dval = 3.5type:IS_DOUBLE疑问 :PHP中有8种数据类型,为什么zval-value 联合体中,只有5种?答:1: NULL,直接 zval-type = IS_NULL,就可以表示,不必设置 value的值.2: BOOL型 , zval-type = IS_BOOL

4、, 再设置 zval.value.lval = 1/0;3: Resourc型 ,资源型 往往是服务器上打开的一个接口,如果 文件读取接口.zval-type = IS_RESOURCE, zval-tyoe.lval = 服务器上打开的接口的编号发现:PHP中,字符串类型,长度是已经缓存的,调用strlen时,系统可以直接返回其长度,不必计算.符号表 - 变量的花名册变量的赋值与引用注意:在传值赋值时, 以: $a = 3 ; $b = $a为例,并没有再次产生结构体,而是2个变量共用1个结构体.此时,2个变量,指向同1个结构体,refcount_gc 值为2思考: a, b指向同一个结构体

5、, 那么,修改a,或b ,对方会不会受干扰?答: 不会,因为2者,有一方修改时,将会造成结构体的分裂.结构体一开始共用, 到某一方要修改值时,才分裂. 这种特点,称为cow , copy on write ,如下图:当引用赋值时, 双方共用一个结构体(is_ref_gc=1)发生如下图的变化引用时的一些怪现象函数执行时的栈变化当函数调用时,为此函数生成了一个”执行环境变量”的结构体,里面存储了当前函数的名称,参数,对应的类.等等信息.称为_zend_execute_data 结构体这个结构体中,还有2个重要的信息:*op_array -是函数的执行步骤*hash_table-symbol_ta

6、ble 这个函数对应的符号表思考一下: 1个函数,递归调用自己3次, 如t在栈上,肯定要有3个 execute_data生成.但是,这3个execute_data-对应几个*op_array;答:函数编译完了,生成一份*op_array,因为函数的执行逻辑是固定的.再问:生成了几个 symbol_table?答:生成3个符号表.函数中的静态变量是如何形成的.t() 自身调用3次t_3 execute_data -symbol_table_3t_2 execute_data -symbol_table_2t_1 execute_data -symbol_table_1|*op_array-*静态变量表安装PHP扩展的注意事项

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1