<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 功能強大 支持多語言、二開方便! 廣告
                ## 2.5 常量 常量是一個簡單值的標識符(名字)。如同其名稱所暗示的,在腳本執行期間該值不能改變。常量默認為大小寫敏感。通常常量標識符總是大寫的。 常量名和其它任何 PHP 標簽遵循同樣的命名規則。合法的常量名以字母或下劃線開始,后面跟著任何字母,數字或下劃線。 PHP中的常量通過`define()`函數定義: ```php define('CONST_VAR_1', 1234); ``` ### 2.5.1 常量的存儲 在內核中常量存儲在`EG(zend_constants)`哈希表中,訪問時也是根據常量名直接到哈希表中查找,其實現比較簡單。 常量的數據結構: ```c typedef struct _zend_constant { zval value; //常量值 zend_string *name; //常量名 int flags; //常量標識位 int module_number; //所屬擴展、模塊 } zend_constant; ``` 常量的幾個屬性都比較直觀,這里只介紹下flags,它的值可以是以下三個中任意組合: ```c #define CONST_CS (1<<0) //大小寫敏感 #define CONST_PERSISTENT (1<<1) //持久化的 #define CONST_CT_SUBST (1<<2) //允許編譯時替換 ``` 介紹下三種flag代表的含義: * __CONST_CS:__ 大小寫敏感,默認是開啟的,用戶通過define()定義的始終是區分大小寫的,通過擴展定義的可以自由選擇 * __CONST_PERSISTENT:__ 持久化的,只有通過擴展、內核定義的才支持,這種常量不會在request結束時清理掉 * __CONST_CT_SUBST:__ 允許編譯時替換,編譯時如果發現有地方在讀取常量的值,那么編譯器會嘗試直接替換為常量值,而不是在執行時再去讀取,目前這個flag只有TRUE、FALSE、NULL三個常量在使用 ### 2.5.2 常量的銷毀 非持久化常量在request請求結束時銷毀,具體銷毀操作在:`php_request_shutdown()->zend_deactivate()->shutdown_executor()->clean_non_persistent_constants()`。 ```c void clean_non_persistent_constants(void) { if (EG(full_tables_cleanup)) { zend_hash_apply(EG(zend_constants), clean_non_persistent_constant_full); } else { zend_hash_reverse_apply(EG(zend_constants), clean_non_persistent_constant); } } ``` 然后從哈希表末尾開始向前遍歷EG(zend_constants),將非持久化常量刪除,直到碰到第一個持久化常量時,停止遍歷,正常情況下所有通過擴展定義的常量一定是在PHP中通過define定義之前,當然也并非絕對,這里只是說在所有常量均是在MINT階段定義的情況。 持久化常量是在`php_module_shutdown()`階段銷毀的,具體過程與上面類似。
                  <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>

                              哎呀哎呀视频在线观看