<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之旅 廣告
                # 7.2 函數的參數 # 7.2 函數的參數 在前面的章節中我們已經介紹過arg info了,下面我們看一下如何通過其實現類型綁定,但這個特性只能在Zend Engine 2也就是PHP5中使用。 讓我們再回顧一下ZE2's argument info結構。每一個arg info結構的聲明都是通過ZEND*BEGIN\_ARG\_INFO()或者ZEND\_BEGIN\_ARG\_INFO\_EX()宏函數開始的,然后緊跟著幾行ZEND\_ARG*\*INFO()宏函數,最終以ZEND\_END\_ARG\_INFO()宏函數結束。每個宏的基本作用我們可以在第6章的最后一節看到。如果我們想重寫一下PHP語言中的count()函數,可以: ``` ZEND_FUNCTION(sample_count_array) { zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",&arr) == FAILURE) { RETURN_NULL(); } RETURN_LONG(zend_hash_num_elements(Z_ARRVAL_P(arr))); } ``` zend\_parse\_parameters()本身可以保證傳遞過來的參數是一個數組。但是如果我們通過zend\_get\_parameter()函數來接收參數的話就沒這么幸運了,需要我們自己進行類型校對。如果想讓內核自動完成類型校對,便需要arg\_info上場了: ``` ZEND_BEGIN_ARG_INFO(php_sample_array_arginfo, 0) ZEND_ARG_ARRAY_INFO(0, arr, 0) ZEND_END_ARG_INFO() .... PHP_FE(sample_count_array, php_sample_array_arginfo) .... ``` 這樣我們便把類型校對的工作交給了Zend Engine,是不是有種如釋重負的感覺!You've also given your argument a name so that the generated error messages can be more meaningful to script writers attempting to use your API. 我們同樣可以對參數中的對象進行校驗,限制其是繼承自某個類或者實現了某個接口等等。 ``` ZEND_BEGIN_ARG_INFO(php_sample_class_arginfo, 0) ZEND_ARG_OBJ_INFO(1, obj, stdClass, 0) ZEND_END_ARG_INFO() ``` 需要注意的是,此時第一個參數的值是數字1,代表著以引用的方式傳遞。其實這個參數對于對象來說幾乎沒用,因為ZE2中所有的對象在當作函數參數的時候都是默認以引用的形式傳遞的。但是我們又必須把這個參數設置為數字1,除非你不想讓你的擴展與PHP4兼容。在PHP4中,對象是傳遞的一個完整Copy,而非通過引用。 ``` 對于數組和對象參數,不要忘記最后的允許為NULL的參數。更多的信息請參考第6章最后一節的有關敘述。 ``` 通過arg info的方式來實現類型綁定的功能只對ZE2有效,也就是PHP5+。如果你想在PHP4上實現相應的功能,那需要用 zend\_get\_parameters()函數來接收參數,然后通過Z\_TYPE\_P()宏函數來檢測參數的類型或者通過convert\_to\_type()函數進行類型轉換。 ## links - 7.1 [zend\_parse\_parameters](7.1.html) - 7.3 [第七章小結](7.3.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>

                              哎呀哎呀视频在线观看