平常我們查看php源代碼的時候,經常會看到有以下代碼的存在:
那麼,這其中的PHP_FUNCTION到底是什麼呢?現在開始,來看看他到底是什麼鬼東西。
大寫的,猜測一下,應該是宏定義,搜索,果然在源碼的php-5.6.22-src\main\php.h文件裏面,大概在347行
接着搜索ZEND_FUNCTION這個宏定義,在php-5.6.22-src\Zend\zend_API.h文件找到,大概在68行
幸運的是,還可以在這個文件裏面找到接下來的ZEND_NAMED_FUNCTION宏定義和ZEND_FN宏定義,就在剛剛找到的ZEND_FUNCTION宏定義上方
接着其實就是INTERNAL_FUNCTION_PARAMETERS宏定義,可以在php-5.6.22-src\Zend\zend.h文件裏面找到,大概是290行,它其實是一些固定的參數
這些定義串聯的步驟如下(以函數strpos爲例子):
通過上面的流程圖可以很清晰的觀察到PHP_FUNCTION的展開形式。
PS:上面還可以接着展開TSRMLS_DC宏定義,可以在php-5.6.22-src\TSRM\TSRM.h文件166行找到,展開後爲
void zif_name(int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, intreturn_value_used, void ***tsrm_ls)