PHP 阅读 4604
PHP 第23章 底层分析

PHP 第23章 底层分析

2016-08-11 • lulubin

一、PHP 的编译特点

https://file.lulublog.cn/images/3/2022/08/kOaOWxqQq1s77SXqhBoZwX9S3sXQXa.png?sign=3008d3a81c1e5f17004b4202846bef14&t=6acd0400

注:脚本一运行结束,opcode 将会被清除;但是第三方工具:apc,xcache 等加速器可以保存 opcode

二、PHP 变量的底层实现

由 zend 虚拟机实现,zend 虚拟机是用 C 语言开发的

https://file.lulublog.cn/images/3/2022/08/Fckp5QK6W6P6wXq8R6pOOcr3q74KrU.png?sign=1d8fcc9de10fba1f419d93c9e8be39a1&t=6acd0400

https://file.lulublog.cn/images/3/2022/08/QjBn22eD07zEzb6jz7EA80NE0bnOBC.png?sign=6ba19ff404ef6c98b0ac1bd9d7647455&t=6acd0400

疑问:PHP 中有8种数据类型,但为什么 zval->value 联合体中,只有5种?

答:① NULL,直接 zval->type = IS_NULL,就可以表示,不必设置  value 的值

② BOOL型 , zval->type = IS_BOOL,再设置 zval.value = 1/0

③ Resourc型,资源型 往往是服务器上打开的一个接口,如果文件读取接口,zval->type = IS_RESOURCE, zval.value = 服务器上打开的接口的编号

三、PHP 变量名的记录

记录在全局符号表中

https://file.lulublog.cn/images/3/2022/08/y0ttNHHccv7hCtchKC7Kzihh7CL2iH.png?sign=6ac58620f4cde8bf750ede39d34f00e6&t=6acd0400

四、is_refcount__gc 和 is_ref__gc

1、is_refcount__gc:引用该结构体的变量个数

https://file.lulublog.cn/images/3/2022/08/CD9jZSw8DD569KD8C65D9IDIcCl5xj.png?sign=af26fd3a86a347c93ef83936ea1afb09&t=6acd0400

2、is_ref_gc:是否有引用传递

https://file.lulublog.cn/images/3/2022/08/pfkh262C2Q2PSsO6IZIS2IvAcFa6ff.png?sign=31fefab1268a97c7299aab0b2d9b242f&t=6acd0400

五、数组

1、存储与分裂

https://file.lulublog.cn/images/3/2022/08/K5aKVO54QGnDw55E4kGgAk5kEu514A.png?sign=41ab0e935cd1ca3f1160bccbca3e48fe&t=6acd0400

2、foreach

https://file.lulublog.cn/images/3/2022/08/KQ4ktzfHQF8j8dwO0K8282k58jOqTf.png?sign=f15325fa51d7a742ee315848ed909de1&t=6acd0400

思考:

https://file.lulublog.cn/images/3/2022/08/t3wjQ8eXYSUCWmWq8uxwqCxXqJ58Bq.png?sign=72ce20d72ddc4ac2061abd6297653c82&t=6acd0400

六、函数

1、函数的结构体

https://file.lulublog.cn/images/3/2022/08/XQv8Fd5Ef038oEx8QwnW80el5vP3bQ.png?sign=0bebf4cc0ae6304d4ac6ca34357c7eff&t=6acd0400

2、静态变量

https://file.lulublog.cn/images/3/2022/08/Zr4Lx5hRrA35117a5A5B78x734brr3.png?sign=b112ace8a96f229fe5ee9ce886675595&t=6acd0400

七、常量

https://file.lulublog.cn/images/3/2022/08/v5Pqp8e15pjqpJ80a5j7H1sHe9DjE0.png?sign=d13d6e0fd6c0cbb5a502daf21b9c6684&t=6acd0400

1、php 底层是如何区别是系统定义的常量还是用户定义的常量:在 define 函数中声明

https://file.lulublog.cn/images/3/2022/08/UXIx4xH9T8EmZ8fL8ddX8JV4DRM4Xz.png?sign=f14b508c06c9c48d960308f518b4470f&t=6acd0400

https://file.lulublog.cn/images/3/2022/08/auqJAyQUZ8jcQMITMaK8TnZMqgTiCR.png?sign=3c56b5ad85602fb4c056f5174795f8a9&t=6acd0400

2、php 常量实现全局访问的原理

https://file.lulublog.cn/images/3/2022/08/UJG7KJKZl6S9sGsp6SqSlk2JKJSLkL.png?sign=4997d33dc73afeb34eff761b4d6096a1&t=6acd0400

3、define 函数的两个现象

https://file.lulublog.cn/images/3/2022/08/Oyf0EZC437T5yDh3ofd5IZi7R70h34.png?sign=b775d66e0485b5aa093c1d04a36c9d59&t=6acd0400

八、对象

1、对象的存储

https://file.lulublog.cn/images/3/2022/08/crZiD1MZG9PETR2p1EZKLmSiiKEeKk.png?sign=651ebd0f0ecfe5b768c7ecc39c928c9d&t=6acd0400

2、例子

https://file.lulublog.cn/images/3/2022/08/zIPX1wWr4C4xSc5c7XIiXFfPCPRRx4.png?sign=8401b37f1b72ee3e06f7df769d7de2fa&t=6acd0400

九、php 的内存分层

01.png

打赏

×

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

PHP文章
带到手机上看