PHP核心介紹及擴充套件開發指南 類和物件

2021-06-16 06:46:06 字數 804 閱讀 2600

extension的編譯是比較簡單的,下面是個示例makefile:

這將建立乙個可動態載入的extension模組,如果想將extension靜態編譯進php,就需要使用php本身的編譯系統,這裡不作介紹。

另外,zend提供了乙個小腳本來簡化建立和編譯extension的過程,可以在《php手冊》的相關章節找到其使用方法。

目前,zend正在開發乙個更加完善和標準的extension生成工具,可以在這裡找到它:

extension有兩種載入方式,通過php.ini在啟動時載入或是通過dl()函式在執行時載入,前者需在php.ini中新增一行命令:extension=myext.so。這兩種方式最後都將呼叫乙個名為php_ld()的內部函式。

php_ld()首先呼叫系統例程載入動態庫,之後解析並執行get_module()函式來獲得模組的zend_module_entry結構(參見2.1.3)。

然後,呼叫函式zend_register_module_ex()來註冊模組,這個函式先將模組的zend_module_entry加入到乙個名為module_registry的hashtable中,然後呼叫zend_register_functions將模組匯出的函式加入cg(function_table)(參見2.5)這個hashtable中,這樣我們就可以呼叫模組匯出的函式了。最後,php_ld()將呼叫模組的啟動函式(參見2.4)來初始化模組。

如果模組是dl()動態載入的,zend還將接著呼叫模組的啟用函式,因為當前顯然有頁面在執行。

最後要說明的是,通過dl()載入的模組稱為「臨時模組」,在頁面執行完畢時將被解除安裝,同時,其建立的常量和資源也將被銷毀。

PHP核心介紹及擴充套件開發指南 類和物件

extension的編譯是比較簡單的,下面是個示例makefile 01 擴充套件搜尋目錄,模組被放到這裡才能被找到和載入 02 可以從php.ini中的extension dir命令獲取該值 03php ext home home wiki php5 lib php extensions 04 p...

PHP擴充套件開發(2) 實現類擴充套件

在第一篇文章中,我們所開發的擴充套件是單個函式,本篇文章看一下如何開發乙個類擴充套件。假設我們要用php擴充套件實 現乙個類person,它有乙個private的成員變數 name和兩個public的例項方法getname 和setname 可以用 php 表示如下 class person pub...

PHP擴充套件開發常用巨集介紹

name 函式名 arg info 函式引數定義資訊 example const zend function entry xml functions 最常用的就是下面三個,定義在zend api.h當中.zend begin arg info ex name 鍵名,規範命名都是函式名 arginfo...