接下來我們要用擴充套件的形式實現以下類(演示環境:linux、php-5.5.34-src)
1<?php
2class
person3
9public
function setname($name)10
13 }
在php原始碼目錄下
1 cd php-5.5.34-src2cd ext
3 ./ext_skel --extname=hdx //
生成hdx擴充套件骨架
4 cd hdx
1.修改config.m4
php_arg_with(hdx, forhdx support,
[ --with-hdx include hdx support])
//把這兩行前面的dnl去掉 大概在 10-12行
2.在hdx.h新增如下
php_method(person, __construct);php_method(person, __destruct);
php_method(person, getname);
php_method(person, setname);
3.在hdx.c下方新增相應函式
1php_method(person, __construct) 45
php_method(person, __destruct) 89
php_method(person, getname)
1516
php_method(person, setname)
23 self =getthis();
24make_std_zval(value);
25 zval_stringl(value, arg, arg_len, 0
);26 separate_zval_to_make_is_ref(&value);
27 zend_update_property(z_objce_p(self), self, zend_strl("
_name
"), value tsrmls_cc);
28return_true;
29 }
對上面的**做一些解釋:
a. 獲取方法的引數資訊,仍然使用zend_parse_parameters函式,與之前我們介紹過的一樣;
b. 獲取this指標(相對於php**而言,在php擴充套件中仍然使用zval結構表示)使用getthis()函式;
c. 使用make_std_zval巨集申請並初始化乙個zval結構,在php擴充套件中,所有的資料型別其實都是用zval結構來表示的,在本系列文章中我會單獨寫一篇來介紹zval。
d. 獲取屬性值使用zend_read_property()函式,使用zend_update_property()函式更新屬性值。
4.在hdx.c 上方,初始化類:在擴充套件初始化函式中,註冊並初始化類。
1 zend_class_entry *person_ce;23php_minit_function(fetion_echo)
4
使用init_class_entry巨集初始化類,第二個引數指定類名,第三個引數是函式表。
5. 註冊到函式:宣告方法的引數,並註冊到函式表中。
1 zend_begin_arg_info(arg_person_setname, 0)2 zend_arg_info(0
, name)
3 zend_end_arg_info() const zend_function_entry fetion_echo_functions = /*
must be the last line in fetion_echo_functions
*/ };
類方法引數的宣告與之前我們函式引數宣告方式一致,在註冊類方法到函式表中時使用php_me巨集,而不是之前使用的php_fe巨集。
zend_acc_public:指定方法的訪問修飾符
zend_acc_ctor:指定該方法為建構函式
zend_acc_dtor:指定該方法為析構函式
6.安裝
1 /usr/local/php/bin/phpize2 ./configure --with-php-config=/usr/local/php/bin/php-config
3 make && make install
然後在php安裝目錄下修改php.ini把擴充套件新增上
7. 執行測試:編譯安裝擴充套件後,編寫一段簡單的測試指令碼:
1<?php
2 $person = new
person();
3 $person->setname("huangdongxi
");
4 echo $person->getname().'
';
執行後可以看到如下輸出,說明擴充套件工作正常:
__construct called.
huangdongxi
__destruct called.
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函...