php底层变量

在zend目录中的zend.h中会发现变量是这样定义的

typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct {
char *val;
int len;
} str;
HashTable *ht; /* hash table value */
zend_object_value obj;
zend_ast *ast;
} zvalue_value;

struct _zval_struct {
/* Variable information */
zvalue_value value; /* value */
zend_uint refcount__gc;
zend_uchar type; /* active type */
zend_uchar is_ref__gc;
};

zval结构体就是PHP的变量

一共有4个成员变量

value代表变量的值 refcount__gc变量的引用数 type变量的类型 is_ref__gc是否被引用 value的结构类型对应上面的_zvalue_value 的联合体

ZEND引擎定义了以下几种变量类型 php 版本(5.6.8)

时间: 2024-11-05 19:40:24

php底层变量的相关文章

php底层--2

2016-9-25 php的底层是用C语言写的,C语言是强类型的语言,而php是弱类型的语言,这是怎么实现的呢? 我们去查询PHP的源码可以发现,在源码的zend文件夹下,打开zend.h文件,找到C语言的结构体struct _zval_struct struct _zval_struct{ zvalue_value value; zend_uint refcount__gc; zend_uchar type; zend_uchar is_ref_gc; } 这个结构体是php底层变量实现的关键

Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938393.html 在分析start_kernel函数的时候,其中有构架相关的初始化函数setup_arch. 此函数根据构架而异,对于ARM构架的详细分析如下: void __init setup_arch(char **cmdlin

三、python的流程控制

三.python的流程控制 1.顺序结构 python和shell,java等语言都有一定的执行顺序即顺序结构. python语言在解释器中的执行顺序是:从上到下依次执行,从左到右执行,所以函数或者变量必须先声明后调用. 2.分支选择结构 在python中只有if选择结构,没有java里的switch...case..结构和shell里的case ...;;;....esac结构,并且与java中的用法规则相似,但是语法格式不一样. 当表达式的结果是数据类型里面的布尔型中的true时,执行if后

java线程(四) : 对象的组合

设计线程安全的类: 在设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问策略 如果不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.要满足在状态变量的有效值或状态转换上的各种约束条件,就需要借助于原子性与封装性. 如果在操作中包含有基于状态的先验条件,那么这个操作就称为依赖状态的操作,在并发程序中一直要等到先验条件为真,然后再执行该操作.在java中,等待某个条件为真的各种内置机制(包括等待和通知机制)都

非阻塞算法-简单的计数器

1.为什么要用非阻塞算法?我们知道为了避免并发环境下操作共享变量的问题,可以采用同步(synchronize)和锁(Lock)的方式做到线程安全,但是JVM处理锁竞争时对于竞争失败的线程采用的是挂起稍后调度的策略,这样会带来额外的线程上下文切换成本.同时和CAS(Compare And Set)这种非阻塞算法相比,CAS是在底层硬件(CPU)层面实现,只需要锁定独立的内存位置,更细的同步粒度使得CAS失败的线程可以立即重试而不用挂起.总的来说,大多数场景下非阻塞算法和同步锁相比能带来更好的性能,

如何定位 Node.js 的内存泄漏

基础知识 Node.js 进程的内存管理,都是有 V8 自动处理的,包括内存分配和释放.那么 V8 什么时候会将内存释放呢? 在 V8 内部,会为程序中的所有变量构建一个图,来表示变量间的关联关系,当变量从根节点无法触达时,就意味着这个变量不会再被使用了,就是可以回收的了.而这个回收是一个过程性的,从快速 GC 到 最后的 Full GC,是需要一段时间的.另外,Full GC 是有触发阈值的,所以可能会出现内存长期占用在一个高值,也可以算是一种内存泄漏,可以从<一次 Node.js 应用内存暴

kali linux 信息搜集之常用的几个软件常用命令

nmap nmap + ip 地址 扫描主机开放端口 nmap -p 1-x + ip 地址  扫描特定主机端口 nmap -v -A -sV +ip地址 详细扫描主机 nmap - p 端口 +ip 地址 192.168.1.* 集群内特定ip nmap -O 系统测试 nmap -sV +ip 服务上运行的端口 znmap 图形化的 pOf指纹 别工具 可以扫描抓包文件 recon -ng 侦察使用侦察/主机/枚举/ HTTP /网络/ xssed) 目标域 使用众多模块 Netdiscov

浏览器相关--H5本地存储

这一系列主要研究一下浏览器底层的一些东西,包括协议.存储.底层变量.部分API等. 今天首先介绍一下浏览器底层存储技术. 浏览器存储主要包括一下几个部分1. cookie2. localStorage3. sessionStorage4. indexDB5. websql6. window变量7. flash cookie 下面具体说一下,虽然也没特别具体... 1.cookie这个存储用了很久了,而且也是以前大多网站十分喜欢的存储站点.但是也很容易被清除.同时cookie会在每一次通信过程中传

RPC(远程过程调用)的应用

接触背景 因为工作上某项目的需要设计一种分布式处理耗时的运算,每个节点然后将运算结果返回给中心服务器,而最初未了解RPC这部分之前我的设计是在每一个RPC服务器上搭建一个webserver,然后部署运算的service在上面,用json的方式通讯,这样肯定是可以实现的,但是部署极其麻烦又让webserver大材小用还会增加其它脚本语言或者框架的依赖. 之前也是有听说RPC,我当初也只是以为是一种概念,且需要自己实现的一种远程过程调用,没想到发现有大量现成的库已经做好了包装,让你远程调用就像本地一