//php_myext.h
ZEND_BEGIN_MODULE_GLOBALS(myext)
unsigned long counter;//在这里定义需要的全局变量,可以多个,每个变量一行,
ZEND_END_MODULE_GLOBALS(myext)
//这个宏展开之后,实际上就是定义了一个结构体,用来保存每一个全局变量 //这是一个固定写法,你几乎会在每一个扩展里都能看到它的存在,它的作用是封装全局变量的调用,让它能够同时兼任线程安全和非线程安全两个环境
#ifdef ZTS
#define MYEXT_G(v) TSRMG(myext_globals_id, zend_myext_globals *, v)//myext和MYEXT是扩展名称的大小写,不同的扩展有着不一样的名字
#else
#define MYEXT_G(v) (myext_globals.v)//同上
#endif
//php_myext.h 以上这些都是在.h文件中

//myext.c
//定义一个上面提到的结构体的变量,用来保存全局变量的数据
ZEND_DECLARE_MODULE_GLOBALS(myext); zend_module_entry myext_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
"myext",//扩展名称
myext_functions,//zend_function_entry myext_functions 定义好的函数扩展变量
PHP_MINIT(myext),//MINIT_FUNCTION
NULL,//MSHUTDOWN_FUNCTION
PHP_RINIT(myext),//RINIT_FUNCTION//加入PHP_RINIT函数
NULL,//RSHUTDOWN_FUNCTION
PHP_MINFO(myext),//MINFO_FUNCTION
#if ZEND_MODULE_API_NO >= 20010901
PHP_MYEXT_VERSION,
#endif
STANDARD_MODULE_PROPERTIES
};

PHP_MINIT_FUNCTION(myext)
  {

ZEND_INIT_MODULE_GLOBALS(myext, NULL,NULL);//分配一个线程安全的资源id,你可以不用关心它的具体实现,总之用来保存在线程安全中的全局变量。

return SUCCESS;
}

//在每个页面请求时,都是加载这个函数,利用这个特性,来初始化全局变量的值。
PHP_RINIT_FUNCTION(myext)
{
MYEXT_G(counter) = ; return SUCCESS;
}

到现在为止,我们就定义了一个全局变量counter,接着我们将在函数里使用这个变量

//php_myext.h
PHP_FUNCTION(myext_example_global)

//函数注册
PHP_FE(myext_example_global, NULL)//每个函数一行,第一个参数与PHP_FUNCTION(name)的name一样 //函数定义
PHP_FUNCTION(myext_example_global)
{
MYEXT_G(counter)++;
RETURN_LONG(MYEXT_G(counter));
}
/*

var_dump(myext_example_global());
var_dump(myext_example_global());

//你会看到同一次请求中,每次函数调用,counter的数量不断累加,但是每一次的请求,结果都是一样,这就是刚才提到的RINIT函数的作用


int(1)
int(2)

*/

php扩展开发-全局变量的更多相关文章

  1. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  2. PHP扩展开发相关总结

    1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...

  3. PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工 ...

  4. 【原创】PHP扩展开发进阶

    PHP扩展开发进阶 ​作者:wf (360电商技术) 在第一期PHP扩展开发入门中,简单的介绍了PHP的总体架构和执行机制,并具体说明了怎样开发和编译一个主要的PHP扩展,最后在PHP 5.3的环境下 ...

  5. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  6. PHP 扩展开发(将自己的一些代码封装成PHP扩展函数)

    今天时间不多,先给个地址,能搜到我这篇blog的朋友先看看我最近在看的一些文章.资料吧: 我的环境是 lnmp1.1 的 (LNMP一键安装包),所以要进行PHP扩展开发首先应该对环境配置和shell ...

  7. 关于PHP扩展开发(收藏)

    一.Linux shell命令: ls –lh    查看文件大小 du –a    查看文件及文件夹大小 -------------------------- nginx ------------- ...

  8. postgres扩展开发

    扩展开发的基本组成 demo--1.0.sql demo.c demo.control Makefile demo.c当中包含了自定义函数的实现,纯C语言,目录下可包含多个.c文件.demo-1.0. ...

  9. 【转发】NPAPI学习(Firefox和Chrome扩展开发 )

    NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...

随机推荐

  1. webConfig中<customErrors>节点配置

    发布在远程计算机上的网站调试问题: 通常情况下我们会设置错误页,不让用户看到错误信息 这种WebConfig的配置方法是: <configuration> <system.web&g ...

  2. Java基础入门 - 三种注释及文档注释详解

    类似C/C++,Java也支持单行和多行注释 注释中的字符在编译时会被忽略 注释通常为类.变量和方法的主要描述 单行注释 // 注释内容 多行注释 /* 注释内容 */ /* * 注释内容 */ 文档 ...

  3. java 模拟实现消费者和生产者问题

    题目要求 用java代码模拟实现:一个人不断往箱子里放苹果,另一个人不断从箱子里取苹果,箱子只能放5个苹果,苹果数量无限.要求不使用java.util.concurrent包中的类. 思路 这道题主要 ...

  4. 最小白的webpack+react环境搭建

    本文也同步发表在我的公众号“我的天空” 从零开始,用最少的配置.最少的代码.最少的依赖来搭建一个最简单的webpack+react环境. 最近在玩webpack+react+移动端,那么第一步自然是搭 ...

  5. Vue.js双向数据绑定模板渲染

    准备知识 1. 前端开发基础 html.css.js2. 前端模块化基础3. 对ES6有初步的了解 vuejs官网:cn.vuejs.org HTML: <!DOCTYPE html> & ...

  6. mysql启动报错,与selinux相关

    mysql启动报错,与selinux相关 如果遇到报错,可能的情况是 selinux 的关系,可以安装 setroubleshoot-server 工具,使用 sealert -a /var/log/ ...

  7. System Center Configuration Manager 2016 必要条件准备篇(Part2)

    步骤2.下载并安装Windows ADK.WDS组件 注意:在Configuration Manager服务器(CM16)上以本地管理员身份执行以下操作 当我们使用Configuration Man ...

  8. 智能开关:orange pi one(arm linux)控制继电器

    大家都知道,继电器是用小电流去控制大电流运作的一种“自动开关”,在我们生活.工作中随处可见.现在的“智能家居”概念,有很多功能模块其实就是“智能开关”,远程开关.定时开关.条件触发开关等等. 下面介绍 ...

  9. 如何创建一个新浪微博应用以及获得Access token

    前提条件是您得先有一个新浪微博帐号. 打开网页http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5 点击新手引导->开发者页面: 会自动跳转到页面:http ...

  10. POJ - 3470 Walls

    小鸟往四个方向飞都枚举一下,数据范围没给,离散以后按在其中一个轴线排序,在线段树上更新墙的id,然后就是点查询在在哪个墙上了. 这题有个trick,因为数据范围没给我老以为是inf设置小了,WA了很多 ...