当前位置:首页 > 正文

聊聊php数组底层是如何实现的_php数组的类型有哪些

更新时间:2025-01-19 19:38 阅读量:68

PHP的数组底层是怎么实现的

PHP之所以发现这么迅速,有很大原因是因为数组数据非常好处理,而且它可以存储其他类型的数据

数组的值存储在zvalue_value.ht字段中,ht是一个HashTable的数据

有关于HashTable的知识请移步 HASH表和变量

我们来详细说一下数组

PHP里面所有的数据都离不开zval和HashTable,

一个PHP很简单的数组初始化,

在C语言里面实现的却没有那么简单.

经过简单分析,找到数组的初始化的opcode

求各位大神帮帮忙,PHP $_post 数组 怎么实现

有点没看明白你提问的目的!

php数组的定义很宽泛,不需要预先定义变量,可以直接存放数据,有两种形式:索引数组(不指定键,系统自动分配数字键)、关联数组(自定义键,指定键)!

例如:想要获得如下结构的二维数组(关联数组)

[

'A'?=?[

?'type'?=?'TYPE_SINGLE',?

?],?

'B'?=?[

?],

'C'?=?[

?]

]

php定义代码:

//第1种

$abc?=?[

];

注:$_POST?是全局变量,适合从中获取(请求)数据,不建议你修改其内部数据结构,防止键名冲突,破坏全局变量的结构.如果你修改了$_POST,的确,$_POST['A']['type']?能得到字符串'TYPE_SINGLE'!

PHP变量的底层实现

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

其中,

最核心的---Zend目录, 这是zend虚拟的实现. 包括栈,数据类型,编译器等,都在这实现.

最主要的main --PHP的一些内建函数,最主要函数都今天这一节放着.

最大的一个目录ext -- PHP的扩展.

PHP的大部分功能,都是以extenstion形式来完成的.

如果你开发了一个扩展,也放在ext目录下.

Zend对变量的表示:

答: zend实现了 zval结构体

{

value: [联合体] ,联合体的内容可能是C语言中的long,double,hashtable...

type:变量类型 , IS_NULL,IS_BOOL,IS_STRING...... IS_RESOURCE

refcount_gc

is_ref_gc

}

如:

type: IS_LONG

type:IS_DOUBLE

疑问:

答:

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

zval-type = IS_RESOURCE, zval-tyoe.lval =服务器上打开的接口的编号

发现:

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

以上就是川林百科小编为大家整理的聊聊php数组底层是如何实现的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!