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变量底层实现

PHP底层-变量的实现

深入分析HashMap的底层实现

底层实现     当向 HashMap 中 put 一对键值时:         它会根据 key 的 hashCode 的hash算法值计算出一个位置, 该位置就是此对象准备往数组中存放的位置。...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

PHP底层-引用数组

php底层 引用数组

PHP 底层实现

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

PHP底层实现

PHP代码的执行过程:-知其然知其所以然PHP虽然是脚本语言,但是不是靠解释器解释的,而是靠zend虚拟机 PHP代码编译成了opcode,由zend虚拟机老执行opcode 但是opcode在P...

17/7/31学习笔记03

1.Arrays工具类的概述 2.Integer的常见用法

自己实现 ArrayList

英文原文ArrayList 类似于 Array 对象,但是当列表中的对象数量增加时,它提供了动态空间分配的功能。在 Array 对象中,我们需要在初始化时提供数组的大小,但这并不是 ArrayList...

Android 底层框架笔记

android底层的实现      android的apk想要获取底层的数据或者接口,要实现底层的相关服务,现对此作出记录       1,编写hal层    ...

KVO底层实现--写一个自己的KVO

KVO底层原理   Person * p =[[Person alloc] init]; [p addObserver:self forKeyPath:@"age" options:...

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

看到一篇的文章(奇技淫巧一:循环加速),看到有关于count的for循环优化,后者比前者会快上很多: //写法一:for($i= 0; $i //写法二$len= count($data);for($...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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