php擴充套件類開發例項

2022-08-02 05:12:13 字數 3183 閱讀 6286

1

class

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_skel

23 --extname=vector

第二步:修改編譯引數

1 cd php-5.2.14/ext/vector 

2 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/vector   

2 /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...