Php变量底层实现

原创 2016年08月28日 23:57:34

我们解压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种?

  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内核探索之变量(4)- 数组操作

上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪。...
  • ohmygirl
  • ohmygirl
  • 2014年12月25日 14:33
  • 3658

PHP的数组底层实现

PHP的数组底层是怎么实现的? 数组本质上是一个哈希表(HashTable,定义在$PHP_SOURCE_ROOT\\Zend\\zend_hash.h)。具体实现可以查看 $PHP_SOURC...
  • lifushan123
  • lifushan123
  • 2015年04月24日 20:28
  • 1850

PHP的底层实现

PHP代码的执行过程: 编译型语言: 对于C语言,C++, 编译成机器码(二进制)来运行. java语言, 把.java编译成 .class,称为bytecode, 由jvm来运行. 解释语言...
  • genghaifeng
  • genghaifeng
  • 2016年12月03日 14:26
  • 176

PHP 底层实现

​ 2、 请在local环境,编译PHP,要求:版本5.4, 5.5, 5.6,每个版本要涵盖3个编译版本,包括nts \ zts \ debug /usr/lib/apa...
  • Merlin_feng
  • Merlin_feng
  • 2015年07月29日 17:57
  • 700

C++--函数,变量,数组底层表现

函数的工作原理 函数调用其底层操作是创建了一个栈空间,而函数的入口地址,参数,临时变量等就是先通过push入栈,返回时pop出栈释放,保存栈平衡,系统自动管理内存。这个栈通过ebp(栈底)和esp(...
  • u010223072
  • u010223072
  • 2015年05月11日 19:44
  • 1929

变量的底层实现

PHP变量是通过zval结构体来存储的 文件: Zend/zend.h 316行左右(PHP
  • freedomai
  • freedomai
  • 2014年10月04日 09:29
  • 298

从底层原理深入理解 PHP 的引用 “&”

在PHP中使用引用符(&)可以提高程序运行效率,并且更加节约内存空间。但是在不理解引用原理的时候滥用引用符是极其危险的,往往会造成意料之外的错误。 1.变量的底层存储结构zval PHP运行核...
  • JathamJ
  • JathamJ
  • 2017年06月13日 22:20
  • 240

php中,if后直接接变量,是什么意思

if语句用来判断所包含值的布尔值,既true和false两值,通过判断变量的布尔值来决定if语句的操作。 在if语句里变量可以直接被分析布尔值也就是当前转换的意思。 当转换为 boolean 时,以下...
  • daijiguo
  • daijiguo
  • 2015年10月12日 14:11
  • 1036

php底层HashTable的实现

本文转载自:  http://segmentfault.com/blog/tree/1190000000718519   HashTable对PHP来说是一种非常重要的数据结构。很多PHP的内部...
  • sun_1sun
  • sun_1sun
  • 2015年12月06日 21:24
  • 194

php中有两个美元符号$$的变量——可变变量

(*ˉ﹃ˉ) 好凉的天气!~~~直接上代码:
  • A757291228
  • A757291228
  • 2017年02月25日 16:05
  • 1086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Php变量底层实现
举报原因:
原因补充:

(最多只允许输入30个字)