name:函式名
arg_info:函式引數定義資訊
example:
const zend_function_entry xml_functions = ;
最常用的就是下面三個, 定義在zend_api.h當中.zend_begin_arg_info_ex
name:鍵名, 規範命名都是函式名+arginfo
, 也可以自己隨意, 但推薦按照官方擴充套件的全名規範來
_unused:這個估計是擴充套件字段, 預留給以後用的, 現在用不到, 一般傳值為0
return_reference:返回值是否是引用型別
required_num_args:必須傳值的數量
zend_end_arg_info
無引數, 其實就是個花括號zend_arg_info
pass_by_ref:是否為傳引用
name:引數名
example:
zend_begin_arg_info_ex(arginfo_xml_parse_into_struct, 0, 0, 3)
zend_arg_info(0, parser)
zend_arg_info(0, data)
zend_arg_info(1, values)
zend_arg_info(1, index)
zend_end_arg_info()
看看引數巨集定義, 可以清晰地知道返回值為非引用型別, 函式有4個形參, 其中3個引數是必須傳的, 最後乙個引數index
為可選引數.
register_long_constant
name:註冊的常量名
lval:註冊的常量值
flags:常量標記的型別 (const_cs: 是否大小寫區分, 一般都要寫上; const_persistent: 是否持久化, 一般也都要寫上)
一般在模組初始化函式內註冊常量
example:
php_minit_function(gd)
解析引數有兩種方式, 推薦使用新版本的
舊方法:
zend_parse_parameters(int num_args, const char *type_spec, …)
num_args:引數總數
type_spec:指定引數的型別
…接收引數的容器變數們
example:
if (zend_parse_parameters(zend_num_args(), "s|lsb", &text, &linelength, &breakchar, &breakchar_len, &docut) == failure)
新方法:
example:
zend_parse_parameters_start(1, 4)
z_param_str(text)
z_param_optional
z_param_long(linelength)
z_param_string(breakchar, breakchar_len)
z_param_bool(docut)
zend_parse_parameters_end();
新版本的可讀性更強一些. php擴充套件開發
php擴充套件 pecl 跟php引擎一樣都是使用c語言開發。php核心開發組成員鳥哥laruence使用的是vim進行php開發。書籍 案例 php src ext pecl開發郵件組 盡量編寫一些phpt測試用例,php src tests下有很多參考.測試時用 enable debug編譯ph...
php擴充套件開發
二 php擴充套件開發 擴充套件開發流程 生成開發骨架 修改config.m4 編碼 編譯擴充套件為so 修改php.ini 1.生成開發骨架 1.1 進入擴充套件目錄 cd php 7.0.1 ext 1.2 用.ext skel生成骨架 ext skel extname module 1.3 修...
PHP擴充套件開發
php function say hello len spprintf strg,0,hello s n arg return stringl strg,len,0 1.引數接收 這裡接收函式的引數需要通過zend parse parameter函式解析,第乙個引數指定使用者傳入say hello函...