文档章节

数据类型

c
 colin_86
发布于 08/06 14:39
字数 353
阅读 3
收藏 0

文件位置:php-7.2.18\Zend\zend_types.h

#zval(_zval_struct):值及辅助值

struct _zval_struct {
	zend_value        value;			/* value */
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(
				zend_uchar    type,			/* active type */
				zend_uchar    type_flags,
				zend_uchar    const_flags,
				zend_uchar    reserved)	    /* call info for EX(This) */
		} v;
		uint32_t type_info;
	} u1;
	union {
		uint32_t     next;                 /* hash collision chain */
		uint32_t     cache_slot;           /* literal cache slot */
		uint32_t     lineno;               /* line number (for ast nodes) */
		uint32_t     num_args;             /* arguments number for EX(This) */
		uint32_t     fe_pos;               /* foreach position */
		uint32_t     fe_iter_idx;          /* foreach iterator index */
		uint32_t     access_flags;         /* class constant access flags */
		uint32_t     property_guard;       /* single property guard */
		uint32_t     extra;                /* not further specified */
	} u2;
};

#zend_value:值

typedef union _zend_value {
	zend_long         lval;				/* long value */
	double            dval;				/* double value */
	zend_refcounted  *counted;
	zend_string      *str;
	zend_array       *arr;
	zend_object      *obj;
	zend_resource    *res;
	zend_reference   *ref;
	zend_ast_ref     *ast;
	zval             *zv;
	void             *ptr;
	zend_class_entry *ce;
	zend_function    *func;
	struct {
		uint32_t w1;
		uint32_t w2;
	} ww;
} zend_value;

数据类型值 zval.u1.v.type

/* regular data types */
#define IS_UNDEF					0
#define IS_NULL						1
#define IS_FALSE					2
#define IS_TRUE						3
#define IS_LONG						4
#define IS_DOUBLE					5
#define IS_STRING					6
#define IS_ARRAY					7
#define IS_OBJECT					8
#define IS_RESOURCE					9
#define IS_REFERENCE				10

/* constant expressions */
#define IS_CONSTANT					11
#define IS_CONSTANT_AST				12

/* fake types */
#define _IS_BOOL					13
#define IS_CALLABLE					14
#define IS_ITERABLE					19
#define IS_VOID						18

/* internal types */
#define IS_INDIRECT             	15
#define IS_PTR						17
#define _IS_ERROR					20

数组结构

key value 按照顺序存入Bucket *arData,并记录idx,与key中间的关系表,key编程哈希值

typedef struct _Bucket {
	zval              val;
	zend_ulong        h;                /* hash value (or numeric index)   */
	zend_string      *key;              /* string key or NULL for numerics */
} Bucket;

typedef struct _zend_array HashTable;

struct _zend_array {
	zend_refcounted_h gc;
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(
				zend_uchar    flags,
				zend_uchar    nApplyCount,
				zend_uchar    nIteratorsCount,
				zend_uchar    consistency)
		} v;
		uint32_t flags;
	} u;
	uint32_t          nTableMask;
	Bucket           *arData;
	uint32_t          nNumUsed;
	uint32_t          nNumOfElements;
	uint32_t          nTableSize;
	uint32_t          nInternalPointer;
	zend_long         nNextFreeElement;
	dtor_func_t       pDestructor;
};

© 著作权归作者所有

下一篇: C++ *与&
c
粉丝 3
博文 197
码字总数 29024
作品 0
成都
高级程序员
私信 提问
C语言数据怎么描述?最全面解析,C语言基础教学档案!编号零零五

c程序中使用的数据根据其属性分为不同类型。在C编程语言中,数据类型可以定义为具有类似特征的一组值。数据类型中的所有值都具有相同的属性。 c编程语言中的数据类型用于指定可以在变量中存储...

这个人很懒什么都没留下
07/27
0
0
第十九节:Java基本数据类型,循环结构与分支循环

基本数据类型 Java中的基本数据类型,有8种,在Java中有四种类型,8种基本数据类型。 字节 boolean 布尔型为1/8 byte 字节类型为1 short 短整型为2 char 字符型为2 int 整数类型为4 float 浮...

达叔小生
2018/08/05
0
0
Java基础概述

数据类型 Java中的数据是分类型的,可以分为以下几种类型: l 基本数据类型:整数类型、小数(浮点型)类型、字符类型、布尔类型 l 引用数据类型:数组、类、接口 常量 固定不变的值,就是常...

Sweltering
2017/11/30
0
0
Java 多态中的强制类型转换

目前多态情况下不能访问子类特有的成员。 如果需要访问子类特有的成员,那么需要进行类型强制转换. 基本数据类型的转换 小数据类型-------->大的数据类型 自动类型转换 大数据类型---------...

hellation_
04/27
6
3
Sqlserver数据库类型介绍,可作为参考书

在计算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类。 在SQL Server 中每个变量、参数、表达式等都有数据类型。系统提供的数据类型分为几...

卢水发
2013/04/25
121
1

没有更多内容

加载失败,请刷新页面

加载更多

最好的重试是指数后退和抖动

1. 概述 在本教程中,我们将探讨如何使用两种不同的策略改进客户端重试:指数后退和抖动。 2. 重试 在分布式系统中,多个组件之间的网络通信随时可能发生故障。 客户端应用程序通过实现重试来...

liululee
9分钟前
3
0
聊一聊大厂内部的安全管理机制

工作了两个月了体会到了很多之前做外包小项目没有的东西,不得不说大厂的还是有自己一套的完善的体制,不会像B站那样泄露自己整个后台的源码这种事情发生。 电脑办公 比如说在使用电脑办公这...

gzc426
37分钟前
4
0
如何利用deeplearning4j中datavec对图像进行处理

NativeImageLoader Labelloader = new NativeImageLoader(112, 112, 3,new FlipImageTransform(-1)); 一、导读 众所周知图像是有红绿蓝三种颜色堆叠而成,利用deeplearning对图像处理,必须把...

冷血狂魔
38分钟前
7
0
1. Context - React跨组件访问数据的利器

《react-router-dom源码揭秘》系列 2. React-Router的基本使用 3. react-router-dom源码揭秘 - BrowserRouter Context提供了一种跨组件访问数据的方法。它无需在组件树间逐层传递属性,也可以...

前端老手
48分钟前
5
0
Docker入门实战--开篇,为什么要使用Docker

前面Thrift文章中,我曾经介绍过我为什么要用Thrift。Docker的使用却是不一样的。纯属没事找事,因为我现在一个人的团队,项目只要一个project目录足够了! 那我何苦要用Docker呢 各位且听听...

后天的奇点
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部