PHP動態屬性和stdclass
動態屬性不是PHP專有的,很多解釋型語言都有這個功能,比如javascript。它可以動態的為其物件新增刪除屬性。PHP也可以動態的新增屬性,如下面的例子:
class testClass { public $A = 'a' ; } $t = new testClass(); echo $t ->A, ' ; echo 'B isset=' ,isset( $t ->B)? 'Y' : 'N' , ' ; //$t中並沒有變數B $t ->B= 'b' ; //$t中給新增了變數B,並且賦值。 echo 'B isset=' ,isset( $t ->B)? 'Y' : 'N' , ' ; echo '$t->B=' , $t ->B, ' ; unset( $t ->B); //$t中給刪除變數B。 echo 'B isset=' ,isset( $t ->B)? 'Y' : 'N' , ' ;
|
這讓人想起PHP中的魔術方法,__get和__set,這兩個魔術方法也可以完成這種類似的功能,但是使用他們就顯得複雜。因此只有當一些比較複雜的情況下才會使用 這魔術方法。
有了這種動態屬性新增的能力,你可以定義一個空的類,然後隨時隨地,在要用到屬性的時候自動新增,很方便。
這種動態屬性新增的能力,在型別轉換的時候顯得很有用。在型別轉換的時候,不得不提到stdClass,它是PHP中一個保留的類。官方文件對於這個stdClass描述甚少。下面官方文件的描述:
Converting to object
If an object is converted to an object, it is not modified. If a value of any other type is converted to an object, a new instance of the stdClass built-in class is created. If the value was NULL
, the new instance will be empty. Arrays convert to an object with properties named by keys, and corresponding values. For any other value, a member variable named scalar will contain the value.
|
簡單的說,就是一個某種型別的值轉換成物件時候,就會建立一個stdClass的例項。再看文件中提供例子,一個標量型別的值,轉換成object。
進一步,如果執行如下程式碼:
echo '$obj instanceof stdClass=' ,( $obj instanceof stdClass)? 'Y' : 'N' , ' ;
|
我們得到的結果是:
$obj instanceof stdClass=Y
也就是說轉變成物件的時候,是建立了一個stdClass,然後再動態新增屬性並且賦值。用var_dump方法也可以看出型別是stdClass。
理論上,我們可以手動的例項化一個stdClass,並透過var_dump檢視他。
|
得到的結果就是
object(stdClass)[1]
也就是說stdClass既沒有屬性也沒有任何方法,是一個空的物件。
有不少人認為stdClass類似C#中的object,認為PHP中所有的類都繼承於stdClass,這是錯誤的,下面的程式碼就能說明問題了。
class Foo{} $foo = new Foo(); echo ($foo instanceof stdClass)? 'Y' : 'N' ;
|
因此可以總結如下:
stdClass是PHP保留的,沒有屬性也沒有任何方法的一個空物件,其作用就是為了在物件轉換時候,生成它,並且動態的新增屬性來完成物件的賦值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2768/viewspace-2809779/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- JavaScript私有屬性和靜態屬性JavaScript
- PHP stdClass Object轉arrayPHPObject
- [React]屬性和狀態React
- JS/JQ動態建立(新增)optgroup和option屬性JS
- C#-----ExpandoObject動態屬性C#Object
- 三、動態繫結屬性
- Laravel 動態屬性的實現Laravel
- 類的靜態屬性和方法
- 深入理解JavaScript類與物件:揭秘類欄位和靜態屬性的妙用,js靜態屬性和例項屬性JavaScript物件JS
- 動態修改input元素type屬性值
- 靜態屬性
- 動態設定元素的disabled屬性可用和不可用
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- defer 屬性和 async 屬性
- python實現在類中動態新增屬性和生成物件Python物件
- JavaScript如何動態修改img的src屬性值JavaScript
- javascript如何動態刪除或者新增物件屬性JavaScript物件
- jQuery動態建立html元素並設定屬性jQueryHTML
- 動態生成HTML元素併為元素追加屬性HTML
- jQuery動態修改連結的href屬性值jQuery
- velocity中使用evaluate指令動態解析屬性
- 關於php中靜態方法,靜態屬性的一些淺見PHP
- TypeScript 類靜態屬性TypeScript
- PHP中把stdClass Object轉array的幾個方法PHPObject
- Python學習之路38-動態建立屬性Python
- v-bind 動態更新 HTML 元素上的屬性HTML
- VueJs中動態更改svg的相關屬性VueJSSVG
- JavaScript 靜態屬性與靜態方法JavaScript
- 庫和屬性
- 屬性和方法
- 動態修改Shape的solid屬性的color值Solid
- js動態設定input文字框的readonly屬性JS
- Android動態修改ListView中指定Item的元件屬性AndroidView元件
- 自動生成屬性
- PHP 物件導向 (二)類屬性PHP物件
- Object C學習筆記10-靜態方法和靜態屬性Object筆記
- 【Vue】計算屬性 監聽屬性 元件通訊 動態元件 插槽 vue-cli腳手架Vue元件