• 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)

    */
  • 相关阅读:
    利用border-radius画椭圆
    关于使用svg构建六边形蜂巢列表的方式
    JavaScript拖拽效果的原理及实现
    逆战班-JS的形参与实参
    前端面试&笔试汇总
    less学习---less的混合(mixin)
    less学习---less的嵌套规则
    less学习----less变量
    vue-cli3实现将数据导出为Excel表
    js中apply和call方法浅析
  • 原文地址:https://www.cnblogs.com/wuhen781/p/6240164.html
Copyright © 2020-2023  润新知