Php变量底层实现

我们解压PHP的源码包, 看到如下的目录

Php变量底层实现_第1张图片

其中,最核心的—Zend目录, 这是zend虚拟的实现. 包括栈,数据类型,编译器等,都在这实现.
最主要的main –PHP的一些内建函数,最主要函数都在这里放着.最大的一个目录 ext – PHP的扩展.

PHP的大部分功能,都是以extenstion形式来完成的.如果你开发了一个扩展,也放在ext目录下.

变量在内存中的存储结构

PHP变量是通过zval结构体来存储的

Php变量底层实现_第2张图片

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变量底层实现_第3张图片

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

  1. NULL,直接 zval->type = IS_NULL,就可以表示,不必设置 value的值.
  2. BOOL型 , zval->type = IS_BOOL, 再设置 zval.value.lval = 1/0;
  3. Resource型 ,资源型 往往是服务器上打开的一个接口,如果 文件读取接口.zval->type = IS_RESOURCE, zval->tyoe.lval = 服务器上打开的接口的编号

发现:
PHP中,字符串类型,长度是已经缓存的,调用strlen时,系统可以直接返回其长度,不必计算.

你可能感兴趣的:(Php累积)