首页 > 代码库 > php底层--2

php底层--2

2016-9-25

php的底层是用C语言写的,C语言是强类型的语言,而php是弱类型的语言,这是怎么实现的呢?

我们去查询PHP的源码可以发现,在源码的zend文件夹下,打开zend.h文件,找到C语言的结构体struct _zval_struct

struct _zval_struct{

  zvalue_value value;

  zend_uint refcount__gc;

  zend_uchar type;

  zend_uchar is_ref_gc;

}

这个结构体是php底层变量实现的关键。

PS:

1 php中的一个变量就是底层一个结构体来描述的。

  在底层中,php的值用zvalue_value value标记,而类型是根据上下文得来的zend_uchar type,zvalue_value是一个union,里面是C语言的类型,如long,double,

struct str,struct hashtable object等,是枚举类型,也就是说,一个变量它的类型是根据type定的,而值是根据zvalue_value定的。

如:

$a=3;

表现的C语言中就是一个结构体。

struct{

zvalue_value {long 3}

type IS_LONG

}

 

php底层--2