今天看一下php7中的函式相關的一點兒知識。
首先來說,php的函式分為使用者自定義函式與內部函式兩類,先看一下使用者自定義函式。
通過前面的文章,我們知道了php在編譯執行的時候,會將php指令碼解釋稱opline指令。那同樣的,php中函式也是被編譯成了opline指令集合zend_op_array。呼叫函式時即相當於呼叫指令集。php指令碼通過_zend_function聯合體來定義乙個函式:
union _zend_function common;
zend_op_array op_array;
zend_internal_function internal_function;
};
上面的union中,type用來區別函式型別,common用來存放函式的名稱,引數等資訊。
再來看一下php的內部函式。內部函式的結構不是zend_op_array,而是zend_internal_function。看一下它的結構:
typedef struct _zend_internal_function zend_internal_function;
通過觀察,我們可以看到,內部函式也有與使用者自定義函式中的common完全一樣的乙個成員。而內部函式與使用者自定義函式的區別是由common成員當中的type來區分的。
//內部函式
#define zend_internal_function 1
//使用者自定義函式
#define zend_user_function 2
內部函式與使用者自定義函式的呼叫時一樣的,但是他們的處理機制不同,呼叫普通函式時,是由執行器執行zned_op
_array->opcode,而內部函式是直接呼叫zend_internal_function->handle來執行的,因此,內部函式執行的效率是遠遠高於使用者自定義函式的。
讀《PHP7 核心剖析》
自己的書,在書上做筆記了。一本不錯的書,寫的算是詳細了。書中簡要介紹了各種功能的 c 語言實現的方法名稱。一,php 基礎架構 二,sapi 3 種執行 php 的方式。三,資料型別 四,記憶體管理 執行緒安全 五,php 編譯與執行 六,函式 七,物件導向 類的自動載入,255頁 autoload...
PHP7核心剖析 SAPI簡析
前言 首先,從個人的角度來說一下關於sapi這章吧!這章內容大多其實是講了一些c語言的函式實現部分,之前若是沒有c基礎的同學,看起來可能會比較吃力,所以我的建議是,不用去通讀裡面的關鍵 首先我們對這些函式有乙個影響,知道乙個大概即可,後期有時間可以先了解一下c之後,再過來開這塊,個人感覺會比較輕鬆!...
深入剖析PHP7核心原始碼(二) PHP變數容器
php的變數使用起來非常方便,其基本結構是底層實現的zval,php7採用了全新的zval,由此帶來了非常大的效能提公升,本文重點分析php7的zval的改變。typedef struct zval struct zval typedef union zvalue value str hashtab...