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

2022-10-06 12:21:09 字數 1080 閱讀 9786

在百度百科中,對於stdclasxckowkjhts的定義如下:

複製** **如下:

stdclas在php5才開始被流行。而stdclass也是zend的乙個保留類。stdclass是php的乙個基類,

所有的類幾乎都繼承這個類,所以任何時候都可以被new,可以讓這個變數成為乙個object。同時,

這個基類又有乙個特殊的地方,就是沒有方法。凡是用new stdclass()的變數,

都不可能會出現$a->test()這種方式的使用。php5的物件的獨特性,物件在任何地方被呼叫,

都是引用位址型的,所以相對消耗的資源會少一點。在其它頁面為它賦值時是直接修改,而不是引用乙個拷貝。

以上的定義大多數都是正確的,但是乙個致命性的診斷錯誤: stdclass是php的乙個基類,所有的類幾乎都繼承這個類。 看乙個簡單的例子:

複製** **如下:

class emptyclass else

執行**,輸出」no」,這個例子充分說明了stdclass類並不是所有類的基類。它僅僅是php的乙個保留類,或者說乙個類似於strlen函式這樣的乙個角色。 我們從原始碼的維度看看stdclass類的實現,它註冊的位置在 zend/zend_buildin_functions.c檔案中。如下:

複製** **如下:

zend_minit_function(core)

/* }}} */

這是zend_builtin_module的模組初始化函式,在php核心進行模組初始化操作時會自動載入這個函式, 這樣,stdclass類的註冊操作也就會被執行了。從這段**可以看出,stdclass類是乙個沒有成員變數也沒有成員方法的類。 它的所有的魔術方法,父類、介面等在初始化時都被設定成null。由於在php中對於乙個類我們無法動態的新增方法, 所以這個類只能用來處理動態屬性,這也是我們一種常見的用法。

總結一下:

stdclass類是php的乙個內部保留類,初始時沒有成員變數也沒成員方法,所有的魔術方法都被設定為null,可以使用其傳遞變數引數,但是沒有可以呼叫的方法。stdclass類可以被繼承,只是這樣做沒有什麼意義。

本文標題: 從php的原始碼中深入了解stdclass類

本文位址:

深入了解 MyBatis 原始碼解析(一)

之前在接觸mybatis的時候,就覺得這個技術的思想很新穎,要實現這些功能並不難,但是如何實現,以及mybatis的整體架構卻是我遠遠不及的。而mybatis依然將這些功能非常優雅的實現了。mybatis 模組分析 這裡,我們先簡單的劃分一下mybatis的功能模組。配置解析 mybatis使用的是...

深入了解PHP中的Array陣列和foreach

1.了解陣列 php 中的陣列實際上是乙個有序對映。對映是一種把 values 關聯到 k程式設計客棧eys 的型別。詳細的解釋可參見 php.net中的array陣列 2.例子 一般的陣列 這裡,我通過乙個簡單的例子,並使用圖形方式來了解陣列。a array 3 a 1 b 2 c echo va...

深入了解Python中的變數

目錄 變數,英文叫做 variable。在 電腦科學概述 中是這樣定義的,高階程式語言允許使用描述性的名字指向主儲存器中的位置,而不必再使用數字位址,這樣的名字稱為變數 variable 之所以是這樣取名是因為,隨著程式的執行,只要改變儲存在這個位置裡的值,那麼與改名字相聯絡的值就會改變。從形式上看...