【PHP程式設計+MySQL資料庫+PHPMaker整合教學+技術諮詢】 本月特價優惠中! 動態的架站程式時代,要自訂PHP程式頁面有那麼難嗎? MySQL『資料庫』與『資料表』,用PHP程式有那麼難控制嗎? 你不用死背『PHP程式』與『MySQL資料庫』語法也能獨自設計完成! 這是自動化軟體程式的年代 (用PHPMaker 設計在彈指之間就能自動生成整個 PHP 程式系統) 這不是:神話!程式軟體模組取代了這一切複雜的工程。 你可以自己建構自己專屬的: 訂購表單、會員名單、擴增購物車特殊頁面 →POS 系統、CRM 系統、ERP 系統、HRM 系統...等等 (更可以加入數據資源銷售賺錢!) 該是:【見證奇蹟】的時候了! 非親眼所見....真的無法相信此神兵利器!

要如何在延伸裡呼叫PHP函數呢?在寫延伸的時候,肯定不能什麼功能都自己實現,原因有很多,開發效率、效能問題、維護成本等。

這就避免不了要在延伸裡呼叫PHP內核函數。

那麼如何在延伸裡面使用我們的內建函數呢?

PHP既然有函數,肯定提供了呼叫函數的介面,

這裡有兩個函數:

ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, zend_uint param_count, zval *params[] TSRMLS_DC);

ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, zend_uint param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);

很可惜,只找到聲明的地方,沒有找到註釋的地方,

從聲明來看,call_user_function 封裝了call_user_function_ex,

少了兩個傳參:

int no_separation:這個的用意就是是否對zval進行分離,不過此功能現在已經不用了,如果設為1則直接會出錯,分離的作用是為了改善空間。

symbol_table :是幹嗎用的,確實目前還不知道。

HashTable* function_table: 函數表,我們都知道 使用者函數也好,其他內建函數也好都會存在hashtable裡面,function_table會儲存所有內建函數和使用者函數,用CG來取得,因為函數表屬於是 編譯全局變量。

zval **object_pp:這個是用來我們呼叫類裡的某個方法的對象,看到這裡,你恍然大悟沒有,呼叫普通函數和呼叫類的方法是同一個,
function_table和object_pp只需要一個就可以了。

zval **retval_ptr_ptr:是函數的返回值。

zend_uint param_count:函數/方法 的參數個數

zval **params[] :函數/方法的參數指標。

那麼清楚了兩個API的參數及呼叫方法之後,我們來測試一下,究竟如何來使用。