zoukankan      html  css  js  c++  java
  • php扩展开发-全局变量

    //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)
    = 0; 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)

    */
  • 相关阅读:
    如何批量删除Redis数据库中的Key
    关于 no device found for connection ‘ System eth0′问题
    nginx配置vhost配置文件详解
    Linux教程之:Nginx [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
    Nginx配置文件详细说明
    swoole使用 常用案例
    超好用的一个JQUERY分页器-jpaginate
    如何解决chrome 等浏览器不支持本地ajax请求的问题
    PHP设计模式之单例模式
    IE和其他浏览器用JS新窗口打开的问题
  • 原文地址:https://www.cnblogs.com/wuhen781/p/6240164.html
Copyright © 2011-2022 走看看