php底层原理之PHP变量的存储
来源:互联网 发布:知乎 南北战争的武器 编辑:程序博客网 时间:2024/06/11 10:22
首先,php的解析引擎是Zend引擎,。在zend引擎中是使用zval结构来存储php变量的,zend是用c写的,所以代码中的结构定义也是c的语言结构,建议看懂不的话自行百度或者看书补一下。结构图如下:
从上图可以看出,zval中包含有四个属性,分别是value,type,refcount,is_ref。
value:知道一个union指针,用于存储变量的值,支持的类型有
1)long:整型,不区别长短,统一为long,取值范围是由编译器位数来决定),double,str
2)double:浮点数,也是不区分float或者double,只有一种
3)结构体str:php在存储字符串时,将字符串的内容和长度都存了起来,这是为了避免重复计算字符串的长度。php中的函数strlen,就是直接返回了这个长度。
4)hashTable:用于存放数组,课件php的数组效率是极快的,O(1),后面再介绍一下zend中hashtable的实现吧
5)obj:用于存放对象,我们看一下zend_object_value的定义,实际是一个handle(对象的唯一id)跟handles(存了对象里各种方法的指针的虚函数表)
type:type值是用来判断value中的值,对应的,如下表:
然后,你会发现php的资源居然是存的long类型,那是因为,这个long存的是一个指针,内部数组的index或者是其他结构的资源,可以将其视为handle。
refcount:引用计数,为了减少 内存池的开销和垃圾回收,加入了该字段,这样在下一次用到同一个值的时候就会直接引用该值,然后refcount++就好,当你unset掉某个变量是也是会相应refcount--,直到为0时则会回收把它干掉
is_ref:是否为饮用,1为引用,0为否。php中可以分为两种变量,引用和非引用,非引用就是正常的赋值,但是引用的话是传递地址,需要在前面加上“&”,相当于指针,改变引用的值是会改变原来改地址的变量的值的。
0 0
- php底层原理之PHP变量的存储
- PHP底层之PHP底层工作原理
- php底层变量的实现
- php底层变量的实现
- PHP底层原理之php hash简介
- PHP变量的存储
- Php变量底层实现
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理 .
- PHP底层工作原理
- PHP底层工作原理
- PHP底层工作原理
- 用ABAP来实现柱状图和饼状图的输出
- 利用svn log命令实现的资源版本更新
- UIScrollView
- 仿知乎日报第二篇:Splash页
- PY爬虫专用导航贴
- php底层原理之PHP变量的存储
- Gitlib 添加SSH KEY
- 第一章 TCP/IP协议族
- 汉字转拼音和简拼工具类分享
- Linux IO实时监控iostat命令详解
- linux内核中读写用户态文件
- NOIP提高组【JZOJ4787】数格子
- jQuery中this与$(this)的区别
- Android“沉浸式”_刨根问底