1class
vector2d214
15/**16
* generates a copy of $this vector.
17* @return vector2d a copy of $this vector.
18*/
19public
function
mycopy()
2023
24/**25
* sets $this vector's x and y values, and thus length, to zero.
26* @return vector2d a reference to $this vector.
27*/
28public
function
zero()
2934
35/**36
* whether or not $this vector is equal to zero, i.e. its x, y, and length are zero.
37* @return boolean true if vector is zero, otherwise false.
38*/
39public
function
iszero()
4043
public
function
getx()
4447
public
function
gety()
4851 }
第一步:建立擴充套件骨架
1 cd php-5.2.14/ext./ext_skel23 --extname=vector
第二步:修改編譯引數
1 cd php-5.2.14/ext/vector2 vi config.m4
去掉
1 php_arg_enable(vector, whether to enable vector support,2 [ --enable-vector enable vector support])
兩行前面的dnl
修改後為:
1 dnl otherwise use enable:23 php_arg_enable(vector, whether to enable vector support,
45 dnl make sure that the comment is aligned:
67 [ --enable-vector enable vector support])
第三步:編寫**
vim php_vector.h
在php_function(confirm_vector_compiled); /* for testing, remove later. */
後面增加宣告函式
1 php_method(vector2d,__construct);2 php_method(vector2d,mycopy);
3 php_method(vector2d,zero);
4 php_method(vector2d,iszero);
5 php_method(vector2d,getx);
6 php_method(vector2d, gety);
vim vector.c
宣告方法的引數,註冊到函式表中
1 zend_begin_arg_info(arg_construct, 2) //宣告arg_construct為含有x,y的2個引數
2 zend_arg_info(0,x)
3 zend_arg_info(0,y)
4zend_end_arg_info()
56 zend_function_entry vector_functions = /*
must be the last line in vector_functions
*/15 };
zend_acc_ctor表示為建構函式
zend_acc_public為訪問許可權標記,表示public訪問許可權
在模組初始化函式中註冊並初始化類
1 zend_class_entry *vector2d_ce; //類結構變數
2php_minit_function(vector)
3
在檔案最後面增加具體類方法的實現**:
1 php_method(vector2d,__construct) 78//更改_x,_y屬性值
9 zend_update_property_long(z_objce_p(getthis()), getthis(), zend_strl("_x"),x tsrmls_cc);
10 zend_update_property_long(z_objce_p(getthis()), getthis(), zend_strl("_y"),y tsrmls_cc);
1112
return_true;13}
1415 php_method(vector2d,mycopy)
3334 php_method(vector2d,zero)
4142 php_method(vector2d,iszero) else
5859}60
61 php_method(vector2d,getx)
7172 php_method(vector2d,gety)
第四步:編譯**
1 cd php-5.2.6/ext/vector2 /opt/module/php/bin/phpize
3 ./configure --with-php-config=/opt/module/php/bin/php-config
4make
5make
install
第五步:配置擴充套件
在[php]模組下增加:
PHP擴充套件開發(2) 實現類擴充套件
在第一篇文章中,我們所開發的擴充套件是單個函式,本篇文章看一下如何開發乙個類擴充套件。假設我們要用php擴充套件實 現乙個類person,它有乙個private的成員變數 name和兩個public的例項方法getname 和setname 可以用 php 表示如下 class person pub...
PHP擴充套件開發之簡單類開發
接下來我們要用擴充套件的形式實現以下類 演示環境 linux php 5.5.34 src 1 2class person3 9public function setname name 10 13 在php原始碼目錄下 1 cd php 5.5.34 src 2cd ext 3 ext skel e...
php類的擴充套件和繼承用法例項
函式send用於提交新帖子 function send 函式edit用於編輯帖子 function edit 函式delete用於刪除帖子程式設計客棧 function delete class mainthread extends thread function send function edi...