PHP擴展開發入門教程(2)_PHP教程
推薦:分享一則PHP定義函數代碼這篇文章主要介紹了分享一則PHP定義函數代碼,主要是讓大家熟悉下php的語法格式以及php中插入HTML代碼的方式,希望能夠給到大家一些幫助。 先貼代碼 代碼如下: ?php function table(){ echo table align='center' border='1' width='600' cellspacing='0';; echo capti
這里主要的代碼是定義了名為phpext_myext2_ptr的宏,PHP底層通過該宏來引用我們的擴展。可以看出,該宏的命名同樣是有規范的 — phpext_擴展名_ptr。而myext2_module_entry是我們稍后要在.c文件里定義的結構體,它的命名也是規范的 — 擴展名_module_entry。
此外我們還定義了一個標識我們擴展版本號的宏和一個函數原型(通過PHP_FUNCTION宏,PHP_FUNCTION宏函數的參數是外部可使用的函數名),稍后我們會來實現這個函數。
最后來看下myext2.c文件的實現:
代碼如下:#include "php.h"
#include "php_myext2.h"
/* {{{ myext2_functions[]
*
* Every user visible function must have an entry in myext2_functions[].
*/
static const zend_function_entry myext2_functions[] = {
PHP_FE(hello, NULL)
PHP_FE_END
};
/* }}} */
/* {{{ myext2_module_entry
*/
zend_module_entry myext2_module_entry = {
STANDARD_MODULE_HEADER,
"myext2", /* module name */
myext2_functions, /* module functions */
NULL, /* module initialize */
NULL, /* module shutdown */
NULL, /* request initialize */
NULL, /* request shutdown */
NULL, /* phpinfo */
PHP_MYEXT2_VERSION, /* module version */
STANDARD_MODULE_PROPERTIES
};
/* }}} */
#ifdef COMPILE_DL_MYEXT2
ZEND_GET_MODULE(myext2)
#endif
/* {{{ proto void hello()
Print "hello world!" */
PHP_FUNCTION(hello)
{
php_printf("hello world!\n");
}
/* }}} */
對比下擴展骨架創建的.c文件就會發現,我們的.c文件非常的簡單,其實這些對一個最基本的擴展來說就已經足夠了。
上面的代碼是簡單而清晰的,大部分注釋已經很具說明性了。我們再簡要概括下:
1.開頭包含我們要用到的頭文件。php.h是必須的,它已經幫我們包含了我們會用到的絕大多數的標準庫文件,比如stdio.h,stdlib.h等等。
2.myext2_functions定義了由我們要暴露出去的函數構成的結構體數組,每一個元素通過PHP_FE宏來指定。PHP_FE宏有兩個參數,第一個是外部可使用的函數名,第二個是參數信息(這里我們簡單使用了NULL),最后一個元素必須是PHP_FE_END。注意它的注釋,再次強調,每一個要暴露給外部使用的函數,都必須在該結構體數組中有定義。
3.myext2_module_entry定義了我們的模塊信息,它是一個結構體,大部分屬性都已經通過注釋給出了說明。注意中間的五個函數指針,我們都簡單的置為了NULL,在后續的博文中會講述它們的用法。
4.ZEND_GET_MODULE(myext2)宏函數是被ifdef宏包含的,所以說它是否調用是視情況而定的。至于什么情況下會被調用,什么情況下不會被調用,在后續的博文中會講述。
5.最后幾行代碼我們實現了hello函數,它很簡單,調用php_printf輸出hello world!跟一個換行符,php_printf的用法和printf完全一樣。
6.注釋里的 {{{ 和 }}} 是為了方便vim等編輯器折疊而使用的,我們推薦你也這樣來寫注釋。
這里面涉及了一些宏,比如PHP_FE,PHP_FE_END,PHP_FUNCTION等等,完整介紹這些宏要到后續的博文中才可以,眼下最簡單的辦法就是記住這些宏。
注意到我們每一個文件的命名,變量的命名,空格和縮進,以及注釋等都是非常規范的,遵循這些規范,可以使我們編寫的代碼和PHP本身的代碼更加契合,我們也推薦你使用這樣的規范來開發PHP擴展。
最后,編譯運行我們的擴展:
代碼如下:$ ./buildconf --force
$ ./configure --help | grep myext2
--enable-myext2 Enable myext2 support
$ ./configure --disable-all --enable-myext2 --enable-debug --enable-maintainer-zts
$ make
$ php-dev -m | grep myext2
myext2
$ php-dev -r 'hello();'
hello world!
分享:php簡單分頁類實現方法這篇文章主要介紹了php簡單分頁類實現方法,實例分析了php分頁類的實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下 本文實例講述了php簡單分頁類實現方法。分享給大家供大家參考。具體如下: 代碼如下:class PageModel { /** * 獲取分頁數組 * @param unknown $pag
- 相關鏈接:
- 教程說明:
PHP教程-PHP擴展開發入門教程(2)。