Php变量底层实现
我们解压PHP的源码包, 看到如下的目录
其中,最核心的—Zend目录, 这是zend虚拟的实现. 包括栈,数据类型,编译器等,都在这实现.
最主要的main –PHP的一些内建函数,最主要函数都在这里放着.最大的一个目录 ext – PHP的扩展.
PHP的大部分功能,都是以extenstion形式来完成的.如果你开发了一个扩展,也放在ext目录下.
变量在内存中的存储结构
PHP变量是通过zval结构体来存储的
Zend对变量的表示:
答: zend实现了 zval结构体
{
value: [联合体] ,联合体的内容可能是C语言中的long,double,hashtable...
type: 变量类型 , IS_NULL,IS_BOOL,IS_STRING...... IS_RESOURCE
refcount_gc
is_ref_gc
}
如:
$a = 3;
{
value : [long lval = 3]
type: IS_LONG
}
$a = 3.5
{
value: [double dval = 3.5]
type:IS_DOUBLE
}
PHP中有8种数据类型,为什么zval->value 联合体中,只有5种?
- NULL,直接 zval->type = IS_NULL,就可以表示,不必设置 value的值.
- BOOL型 , zval->type = IS_BOOL, 再设置 zval.value.lval = 1/0;
- Resource型 ,资源型 往往是服务器上打开的一个接口,如果 文件读取接口.zval->type = IS_RESOURCE, zval->tyoe.lval = 服务器上打开的接口的编号
发现:
PHP中,字符串类型,长度是已经缓存的,调用strlen时,系统可以直接返回其长度,不必计算.
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: U3D打Android包的设置
- 下一篇: yii验证规则,model中的rules验证的汇总