<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 第一步:定義全局變量結構體 擴展的全局變量統一定義在一個結構體中,如下 ```c // php_hello.h ZEND_BEGIN_MODULE_GLOBALS(hello) zend_long filter_blank; ZEND_END_MODULE_GLOBALS(hello) ``` 展開后: ```c typedef struct _zend_hello_globals { zend_long filter_blank; // fiter_blank是一個全局變量 } zend_hello_globals; ``` ### 第二步:聲明全局變量 以上在定義好了結構體,接下來就是要去使用它,聲明如下: ```c // hello.c ZEND_DECLARE_MODULE_GLOBALS(hello) ``` 展開后: ```c // 開啟ZTS(線程安全管理) ts_rsrc_id module_name##_globals_id; ``` ```c // 沒有開啟ZTS zend_hello_globals hello_globals; ``` ### 第三步:讀寫全局變量 php_hello.h定義了HELLO_G(v)宏,可以通過HELLO_G(v)讀寫全局變量,宏定義如下: ```c #define HELLO_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(hello, v) ``` 展開后: ```c // ZTS #define HELLO_G(v) ((zend_hello_globals *)(*((void ***) NULL))((hello_globals_id)-1))->v ``` ```c // 非ZTS #define HELLO_G(v) hello_globals.v ``` 使用如下: ```c /* {{{ proto int wcl(string filename) */ PHP_FUNCTION(wcl) { char *filename = NULL; int argc = ZEND_NUM_ARGS(); size_t filename_len; char ch, pre = '\n'; FILE *fp; zend_long lcount = 0; if (zend_parse_parameters(argc, "s", &filename, &filename_len) == FAILURE) return; if ((fp = fopen(filename, "r")) == NULL) { RETURN_FALSE; } while ((ch = fgetc(fp)) != EOF) { if (ch == '\n') { if (HELLO_G(filter_blank) && pre == ch) // 讀取全局變量filter_blank { continue; } lcount++; } pre = ch; } fclose(fp); RETURN_LONG(lcount); // php_error(E_WARNING, "wcl: not yet implemented"); } /* }}} */ ``` ### php.ini配置 如果我們的程序想通過php.ini程序讀取配置,除了需要將配置項定義在全局變量外,還需要將擴展的配置項映射到對應的全局變量,例如php.ini中的hello.filter_blank映射到HELLO_G中的filter_blank全局變量; 比如將php.ini中的hello.filter_blank值映射到HELLO_G()結構中的filter_blank,類型為zend_long,默認值0,則可以這么定義規則: ```c // hello.c PHP_INI_BEGIN() STD_PHP_INI_ENTRY("hello.filter_blank", "0", PHP_INI_ALL, OnUpdateLong, filter_blank, zend_hello_globals, hello_globals) // 其他配置項 PHP_INI_END() ``` 以上定義好規則之后,接下來就要進行解析了: ```c /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(hello) { /* uncomment this line if you have INI entries UNREGISTER_INI_ENTRIES(); // 需要把這行注釋去掉 */ UNREGISTER_INI_ENTRIES(); return SUCCESS; } /* }}} */ ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看