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-变量类型底层实现及strlen和count函数探讨

最近在看《深入理解PHP内核》 看到了比较基础的变量的底层实现,明白了php是如何在强类型语言-C语言的基础上成为了弱类型语言 首先来看一下php变量的底层结构:看不懂C结构的请移步C语言基础教程~学...

QML 的底层实现之 JavaScript 变量编码

QML 的底层实现之 JavaScript 变量编码
  • qyvlik
  • qyvlik
  • 2016年10月29日 00:48
  • 646

PHP 使用CURL库IP欺骗,隐藏真实客户端IP,只有通过代理服务器或者路由底层tcp/ip来实现

p><?phpbr>br>error_reporting(0);br>br>function curl_string ($url,$user_agent,$proxy){br>$ch = cu...

PHP的底层实现

PHP代码的执行过程: 编译型语言: 对于C语言,C++, 编译成机器码(二进制)来运行. java语言, 把.java编译成 .class,称为bytecode, 由jvm来运行. 解释语言...

PHP 底层实现

​ 2、 请在local环境,编译PHP,要求:版本5.4, 5.5, 5.6,每个版本要涵盖3个编译版本,包括nts \ zts \ debug /usr/lib/apa...

php strlen 和 count 底层实现 (局部变量效率优先)

看到一篇的文章(奇技淫巧一:循环加速),看到有关于count的for循环优化,后者比前者会快上很多: //写法一:for($i= 0; $i //写法二$len= count($data);for($...
  • hujunqi
  • hujunqi
  • 2013年07月22日 17:02
  • 758

深入php内核,从底层c语言剖析php实现原理

转:http://blog.csdn.net/nuli888/article/details/52126918 深入php内核,从底层c语言剖析php实现原理 非常好的电子书:http://www...

指针与引用的初始化&顶层底层const变量初始化问题

- 指针与引用的初始化 - 顶层和底层const赋值 - PS- 指针与引用的初始化int i = 1; const j = 2; //错误,&不可以作用在literal value上 int ...

js 模拟实现php类中的静态变量

js是弱类型语言,而且对面向对象编程支持度不够高,它没有命名空间也没有类,但是可以间接的实现类的部分功能,今天就来鲁一鲁js实现类中的静态变量: 静态变量:简单的理解就是每个类的实例所共享的,一个实...

atitit.复合变量,也就是类似$$a的变量的原理与实现 java c#.net php js

atitit.复合变量,也就是类似$$a的变量的原理与实现 java c#.net php js     1.1. 复合变量,也就是类似$$a的变量,它会进行两次的解释。 1 1.2. 数据...
  • attilax
  • attilax
  • 2016年02月10日 19:31
  • 252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Php变量底层实现
举报原因:
原因补充:

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