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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 12.3 常量 # 12.3 常量 在腳本中使用擴展的一個方便之處是,人們可以改變自己定義的常量。你可以通過define()函數來定義一個常量。在內核中,我們將會使用REGISTER\_\*\_CONSTANT()的 家族函數來使用常量。 對于你定義的大多數常量來說,你可能希望在程序初始化的時候便定義這些變量。你可能需要在MINIT函數: ``` PHP_MINIT_FUNCTION(sample4) { REGISTER_STRING_CONSTANT("SAMPLE4_VERSION", PHP_SAMPLE4_EXTVER, CONST_CS | CONST_PERSISTENT); return SUCCESS; } ``` 第一個參數是你要定義的這個常量的名字。在例子中,我們定義了一個名稱為SAMPLE4*VERSION的常量。有一點很重要,這里要注意宏REGISTER**\_CONSTANT()的 使用,這些函數中為了確定常量的名稱長度使用了sizeof()。這就意味著,常量的名稱只能為文字,大家可以嘗試使用一個char* 的變量,這將導致sizeof計算出錯誤 的字符串長度。 接下來,我們來看看常量的值。在大多數情況下,它會是一個單一參數的類型,然而在STRINGL的版本中,你會看到在一些情況下會需要使用第二個參數來表明長度。 當注冊string類型的常量時,字符串的值不會被復制到常量中,而僅僅是一個引用。這意味著,動態創建的字符串需要持久化和在shutdown的階段被釋放掉。 最后,在最后一個參數,你可以通過兩個可以標識位的按位或組合傳入。CONST\_CS標識是否大小寫敏感,一般情況下CONST\_CS標識是默認使用的。對于一些特殊的 情況,比如TRUE,FALSE,NULL等等,這個參數將被省略。 在|后的標識位中的標識符說明了該常量的作用域和生命周期。當我們在MINIT中定義常量時,你可能需要在多個請求中使用這個常量,當你在RINIT中定義常量時,這個 常量會在當前請求結束的時候銷毀。 下面列出的4個創建常量常用的函數,有一個共同需要注意的地方,常量名稱一定要用文字而不是char \*類型的變量。 ``` REGISTER_LONG_CONSTANT(char *name, long lval, int flags) REGISTER_DOUBLE_CONSTANT(char *name, double dval, int flags) REGISTER_STRING_CONSTANT(char *name, char *value, int flags) REGISTER_STRINGL_CONSTANT(char *name,char *value, int value_len, int flags) ``` 如果你沒有辦法提供文本類型的name,那么你可以嘗試使用上面4個函數的底層函數去實現相同的效果: ``` void zend_register_long_constant(char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC) void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC) void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC) void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags,int module_number TSRMLS_DC) ``` 這樣就可以由傳入name\_len而擴大了該族函數的使用范圍(比如在循環中)。 module\_number是一個加載擴展或者卸載擴展時的標識。而你不需要關注它,它會自動加載到你擴展中的MINIT和RINIT中,所以在你用上面4個函數聲明常量的時候, 你可以這樣寫: ``` PHP_MINIT_FUNCTION(sample4) { register_string_constant("SAMPLE4_VERSION", sizeof("SAMPLE4_VERSION"), PHP_SAMPLE4_EXTVER, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC); return SUCCESS; } ``` 除了數組和對象外,其他變量你也可以用來注冊一個常量,但是因為沒有宏和ZEND API去支持這些聲明,所以你必須手動聲明一個常量,通過下面一個例子來了解一下: ``` void php_sample4_register_boolean_constant(char *name, uint len, zend_bool bval, int flags, int module_number TSRMLS_DC) { zend_constant c; ZVAL_BOOL(&c.value, bval); c.flags = CONST_CS | CONST_PERSISTENT; c.name = zend_strndup(name, len - 1); c.name_len = len; c.module_number = module_number; zend_register_constant(&c TSRMLS_CC); } ``` ## links - [目錄](preface.md) - 12.2 [MINFO與phpinfo](12.2.html) - 12.4 [PHP擴展中的全局變量](12.4.html)
                  <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>

                              哎呀哎呀视频在线观看