PHP7核心剖析 PHP 函式

2021-10-01 05:41:23 字數 1044 閱讀 7334

今天看一下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...