從 php 原始碼看 php 中的物件

2022-03-17 10:03:34 字數 931 閱讀 1259

從乙個簡單的例子說起:

class person

}$person = new person("php", 20);

echo serialize($person) . php_eol;

$array = [

'name' => 'php',

'age' => 20,

];echo serialize($array) . php_eol;

輸出:

o:6:"person":2:

a:2:

我們通過上面的例子可以看出,person 物件和下面的陣列序列化結果值的部分是相同的,只是型別不一樣。

這就涉及到 php 中物件和普通變數之間的關係問題,實際上,在 php 中,物件也是變數的一種。

php 中 zend_value 的定義:

typedef union _zend_value  ww;

} zend_value;

而物件的型別是 zend_object:

struct _zend_object ;
也就是說,物件只是一種結構不一樣的變數而已,而其結構中,包含了乙個物件的所有屬性、方法(甚至還有引用計數)。

其中,ce 是儲存該物件的類結構,在物件初始化時儲存了類的入口,相當於類指標的作用。

properties 是乙個 hashtable,用來存放物件屬性。

從上圖可以看出,物件和陣列存在一定的相似,只不過物件還有乙個類指標,通過該指標我們可以實現很多陣列不具備的功能。

物件與陣列:

物件可以轉化為陣列(get_object_vars()),陣列也可以轉化為物件(stdclass)。

php中的原始碼加密

在我們開發的專案中,有一部分可能是用於商業用途,會部署在客戶提供的機器環境中。因為 php 本身是解釋型語言,所以未進行處理的 就會有洩露或被修改的風險。那麼我們可能會想到最簡單有效的方法就是進行加密混淆,然後配合一系列的校驗,來保護我們的 windows 環境下的 dll 檔案 注意 php be...

從PHP的原始碼中深入了解stdClass類

在百科中,對於stdclasxckowkjhts的定義如下 複製 如下 stdclas在php5才開始被流行。而stdclass也是zend的乙個保留類。stdclass是php的乙個基類,所有的類幾乎都繼承這個類,所以任何時候都可以被new,可以讓這個變數成為乙個object。同時,這個基類又有乙...

nginx原始碼分析 從原始碼看nginx框架總結

nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...