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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 7.7.2 獲取zval的值及類型 zval的類型通過`Z_TYPE(zval)`、`Z_TYPE_P(zval*)`兩個宏獲取,這個值取的就是`zval.u1.v.type`,但是設置時不要只修改這個type,而是要設置typeinfo,因為zval還有其它的標識需要設置,比如是否使用引用計數、是否可被垃圾回收、是否可被復制等等。 內核提供了`Z_XXX(zval)`、`Z_XXX_P(zval*)`系列的宏用于獲取不同類型zval的value。 * __Z_LVAL(zval)、Z_LVAL_P(zval_p):__ 返回zend_long * __Z_DVAL(zval)、Z_DVAL_P(zval_p):__ 返回double * __Z_STR(zval)、Z_STR_P(zval_p):__ 返回zend_string* * __Z_STRVAL(zval)、Z_STRVAL_P(zval_p):__ 返回char*,即:zend_string->val * __Z_STRLEN(zval)、Z_STRLEN_P(zval_p):__ 獲取字符串長度 * __Z_STRHASH(zval)、Z_STRHASH_P(zval_p):__ 獲取字符串的哈希值 * __Z_ARR(zval)、Z_ARR_P(zval_p)、Z_ARRVAL(zval)、Z_ARRVAL_P(zval_p):__ 返回zend_array* * __Z_OBJ(zval)、Z_OBJ_P(zval_p):__ 返回zend_object* * __Z_OBJ_HT(zval)、Z_OBJ_HT_P(zval_p):__ 返回對象的zend_object_handlers,即zend_object->handlers * __Z_OBJ_HANDLER(zval, hf)、Z_OBJ_HANDLER_P(zv_p, hf):__ 獲取對象各操作的handler指針,hf為write_property、read_property等,注意:這個宏取到的為只讀,不要試圖修改這個值(如:Z_OBJ_HANDLER(obj, write_property) = xxx;),因為對象的handlers成員前加了const修飾符 * __Z_OBJCE(zval)、Z_OBJCE_P(zval_p):__ 返回對象的zend_class_entry* * __Z_OBJPROP(zval)、Z_OBJPROP_P(zval_p):__ 獲取對象的成員數組 * __Z_RES(zval)、Z_RES_P(zval_p):__ 返回zend_resource* * __Z_RES_HANDLE(zval)、Z_RES_HANDLE_P(zval_p):__ 返回資源handle * __Z_RES_TYPE(zval)、Z_RES_TYPE_P(zval_p):__ 返回資源type * __Z_RES_VAL(zval)、Z_RES_VAL_P(zval_p):__ 返回資源ptr * __Z_REF(zval)、Z_REF_P(zval_p):__ 返回zend_reference* * __Z_REFVAL(zval)、Z_REFVAL_P(zval_p):__ 返回引用的zval* 除了這些與PHP變量類型相關的宏之外,還有一些內核自己使用類型的宏: ```c //獲取indirect的zval,指向另一個zval #define Z_INDIRECT(zval) (zval).value.zv #define Z_INDIRECT_P(zval_p) Z_INDIRECT(*(zval_p)) #define Z_CE(zval) (zval).value.ce #define Z_CE_P(zval_p) Z_CE(*(zval_p)) #define Z_FUNC(zval) (zval).value.func #define Z_FUNC_P(zval_p) Z_FUNC(*(zval_p)) #define Z_PTR(zval) (zval).value.ptr #define Z_PTR_P(zval_p) Z_PTR(*(zval_p)) ```
                  <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>

                              哎呀哎呀视频在线观看