PHP 中的 stdClass 是什么?有什么作用?
對于 stdclass 官方文檔介紹它是具有動態屬性的通用空類。此類的對象可以使用 new 實例化,也可以通過類型轉換為對象創建。幾個 PHP 函數也會創建此類的實例,比如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。
通俗的說,他就是PHP中的空類,用于將其他類型轉換為對象。比如數組,字符串等轉換成一個自定義的對象,常見的有json_decode(),將字符串json格式的數據轉換成一個對象形式。
下面我針對不同使用場景來分析一下stdclass。
1. 數據存儲
PHP開發過程中存儲數據用的最多的時數組,但是我們還可以使用對象來存儲。如果不想自己自定義一個類,來存儲數據,就可以使用 stdclass
(1) 數組存儲
// 定義數組存儲個人信息
$personal_array = [
"name" => "Tinywan",
"home" => "www.tinywan.com",
"address" => "ZheJiang HangZhou"
];
// 顯示數組內容
print_r($personal_array);
輸出結果如下:
Array
(
[name] => Tinywan
[home] => www.tinywan.com
[address] => ZheJiang HangZhou
)
(2) 對象存儲
$personal_object = newstdClass();
$personal_object->name = "Tinywan";
$personal_object->home = "www.tinywan.com";
$personal_object->address = "ZheJiang HangZhou";
// 顯示對象內容
print_r($personal_object);
注意:這里定義的對象,可以動態增加屬性
輸出結果如下:
stdClass Object
(
[name] => Tinywan
[home] => www.tinywan.com
[address] => ZheJiang HangZhou
)
當然,數組和stdclass之間是可以互相轉換。數組轉stdclass對象非常方便,直接使用(object)進行強轉即可:
$personal_array = [
"name" => "Tinywan",
"home" => "www.tinywan.com",
"address" => "ZheJiang HangZhou"
];
$personal_object = (object) $personal_array;
// 顯示對象內容
print_r($personal_object);
輸出內容:
stdClass Object
(
[name] => Tinywan
[home] => www.tinywan.com
[address] => ZheJiang HangZhou
)
對象轉數組也是一樣的:
$personal_object = newstdClass();
$personal_object->name = "Tinywan";
$personal_object->home = "www.tinywan.com";
$personal_object->address = "ZheJiang HangZhou";
$personal_array = (array) $personal_object;
// 顯示數組內容
print_r($personal_array);
輸出內容:
Array
(
[name] => Tinywan
[home] => www.tinywan.com
[address] => ZheJiang HangZhou
)
2. stdclass不是PHP對象的基類
這里需要注意的是,盡管是泛型類,stdClass 并不是 PHP 中對象的基類,我們可以使用 instanceof 關鍵字來證明這一點。
classTinywan{
}
$objClass = newTinywan();
if ($objClass instanceof\stdClass){
echo'Yes';
} else {
echo'No';
}
輸出結果:No
結果證明,stdclass并不是PHP的基類。
3. json_encode() 、 json_decode()與stdclass的關系
json_encode() 和 json_decode() 是專門用于對 JSON 字符串執行操作的函數。json_encode() 用于將 Array 轉換為 JSON 字符串 。因此,首先,我們將一個對象轉換為 JSON 字符串,然后使用 json_decode() 將其轉換為對象。
$empInfo = array(
'name'=>'John',
'address'=>'Houston',
'employment' => array(
'id' => '1',
'address' => 'Los Angeles'
)
);
print_r(json_decode(json_encode($empInfo)));
輸出結果如下:
stdClass Object
(
[name] => John
[address] => Houston
[employment] => stdClass Object
(
[id] => 1
[address] => Los Angeles
)
)