這次,我們将示範如何在php擴充中接受傳入的參數和輸出傳回值。
我們将在擴充中實作<code>default_value</code>方法。
str_concat方法的php擴充源碼:
在php7中提供了兩種擷取參數的方法。<code>zend_parse_parameters</code>和fast zpp方式。
在php7之前一直使用<code>zend_parse_parameters</code>函數擷取參數。這個函數的作用,就是把傳入的參數轉換為php核心中相應的類型,友善在php擴充中使用。
參數說明:
第一個參數,參數個數。一般就使用<code>zend_num_args()</code>,不需要改變。
第二個參數,格式化字元串。這個格式化字元串的作用就是,指定傳入參數與php核心類型的轉換關系。
代碼中 s|z 的含義就是:
除此之外,還有一些specifier,需要注意:
在php7中新提供的方式。是為了提高參數解析的性能。對應經常使用的方法,建議使用fast zpp方式。
使用方式:
以<code>zend_parse_parameters_start(1, 2)</code>開頭。
第一個參數表示必傳的參數格式,第二個參數表示最多傳入的參數個數。
以<code>zend_parse_parameters_end();</code>結束。
中間是傳入參數的解析。
值得注意的是,一般fast zpp的宏方法與zend_parse_parameters的specifier是一一對應的。如:
z_param_optional 對應 |
z_param_str 對應 s
但是,z_param_zval_ex方法比較特殊。它對應兩個specifier,分别是 ! 和 / 。! 對應宏方法的第二個參數。/ 對應宏方法的第三個參數。如果想開啟,隻要設定為1即可。
方法的傳回值是使用<code>return_</code>開頭的宏方法進行傳回的。常用的宏方法有:
return_null() 傳回null
return_long(l) 傳回整型
return_double(d) 傳回浮點型
return_str(s) 傳回一個字元串。參數是一個zend_string * 指針
return_string(s) 傳回一個字元串。參數是一個char * 指針
return_stringl(s, l) 傳回一個字元串。第二個參數是字元串長度。
return_empty_string() 傳回一個空字元串。
return_arr(r) 傳回一個數組。參數是zend_array *指針。
return_obj(r) 傳回一個對象。參數是zend_object *指針。
return_zval(zv, copy, dtor) 傳回任意類型。參數是 zval *指針。
return_false 傳回false
return_true 傳回true
更多宏方法請檢視 zend/zend_api.h中的相關代碼。
<a href="http://www.bo56.com/php7%e6%ba%90%e7%a0%81%e9%98%85%e8%af%bb%e7%ac%94%e8%ae%b0%ef%bc%88%e4%b8%8d%e6%96%ad%e6%9b%b4%e6%96%b0%ef%bc%89/">更多函數說明請檢視</a>
<a href="http://www.bo56.com/download/php7_ext/say_default_value.tar.gz">tar.gz格式下載下傳</a>
<a href="http://www.bo56.com/download/php7_ext/say_default_value.zip">zip格式下載下傳</a>