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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 7.6.4 函數返回值 調用內部函數時其返回值指針作為參數傳入,這個參數為`zval *return_value`,如果函數有返回值直接設置此指針即可,需要特別注意的是設置返回值時需要增加其引用計數,舉個例子來看: ```c PHP_FUNCTION(my_func_1) { zval *arr; if(zend_parse_parameters(ZEND_NUM_ARGS(), "a", &arr) == FAILURE){ RETURN_FALSE; } //增加引用計數 Z_ADDREF_P(arr); //設置返回值為數組: ZVAL_ARR(return_value, Z_ARR_P(arr)); } ``` 此函數接收一個數組,然后直接返回該數組,相當于: ```php function my_func_1($arr){ return $arr; } ``` 調用該函數: ```php $a = array(); //$a -> zend_array(refcount:1) $b = my_func_1($a); //傳參后:參數arr -> zend_array(refcount:2) //然后函數內部賦給了返回值:$b,$a,arr -> zend_array(refcount:3) //函數return階段釋放了參數:$b,$a -> zend_array(refcount:2) var_dump($b); =============[output]=========== array(0) { } ``` 雖然可以直接設置return_value,但實際使用時并不建議這么做,因為PHP提供了很多專門用于設置返回值的宏,這些宏定義在`zend_API.h`中: ```c //返回布爾型,b:IS_FALSE、IS_TRUE #define RETURN_BOOL(b) { RETVAL_BOOL(b); return; } //返回NULL #define RETURN_NULL() { RETVAL_NULL(); return;} //返回整形,l類型:zend_long #define RETURN_LONG(l) { RETVAL_LONG(l); return; } //返回浮點值,d類型:double #define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; } //返回字符串,可返回內部字符串,s類型為:zend_string * #define RETURN_STR(s) { RETVAL_STR(s); return; } //返回內部字符串,這種變量將不會被回收,s類型為:zend_string * #define RETURN_INTERNED_STR(s) { RETVAL_INTERNED_STR(s); return; } //返回普通字符串,非內部字符串,s類型為:zend_string * #define RETURN_NEW_STR(s) { RETVAL_NEW_STR(s); return; } //拷貝字符串用于返回,這個會自己加引用計數,s類型為:zend_string * #define RETURN_STR_COPY(s) { RETVAL_STR_COPY(s); return; } //返回char *類型的字符串,s類型為char * #define RETURN_STRING(s) { RETVAL_STRING(s); return; } //返回char *類型的字符串,s類型為char *,l為字符串長度,類型為size_t #define RETURN_STRINGL(s, l) { RETVAL_STRINGL(s, l); return; } //返回空字符串 #define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; } //返回資源,r類型:zend_resource * #define RETURN_RES(r) { RETVAL_RES(r); return; } //返回數組,r類型:zend_array * #define RETURN_ARR(r) { RETVAL_ARR(r); return; } //返回對象,r類型:zend_object * #define RETURN_OBJ(r) { RETVAL_OBJ(r); return; } //返回zval #define RETURN_ZVAL(zv, copy, dtor) { RETVAL_ZVAL(zv, copy, dtor); return; } //返回false #define RETURN_FALSE { RETVAL_FALSE; return; } //返回true #define RETURN_TRUE { RETVAL_TRUE; return; }
                  <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>

                              哎呀哎呀视频在线观看