在百度百科中,對於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 之所以是這樣取名是因為,隨著程式的執行,只要改變儲存在這個位置裡的值,那麼與改名字相聯絡的值就會改變。從形式上看...