PHP擴展開發入門教程(2)_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:分享一則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

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:PHP教程/更新時間:2015-02-27
      相關PHP教程