在 PHP8 中,這已變更
https://php.dev.org.tw/manual/en/migration80.incompatible.php
許多警告已轉換為錯誤例外
嘗試寫入非物件的屬性。先前這會為 null、false 和空字串隱式建立 stdClass 物件。
因此,如果您要將屬性新增至 $var,您需要先將其設為 stdClass()
$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;
(PHP 4, PHP 5, PHP 7, PHP 8)
一個具有動態屬性的通用空類別。
此類別的物件可以使用 new 運算子實例化,或者透過強制轉型為物件建立。一些 PHP 函數也會建立此類別的實例,例如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。
儘管沒有實作 __get()/__set() 魔術方法,此類別允許動態屬性,並且不需要 #[\AllowDynamicProperties]
屬性。
這不是一個基礎類別,因為 PHP 沒有通用基礎類別的概念。但是,可以建立一個繼承自 stdClass 的自訂類別,因此可以繼承動態屬性的功能。
此類別沒有方法或預設屬性。
範例 1:透過強制轉型為物件建立
<?php
$obj = (object) array('foo' => 'bar');
var_dump($obj);
以上範例將輸出
object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
範例 2:透過 json_decode() 建立
<?php
$json = '{"foo":"bar"}';
var_dump(json_decode($json));
以上範例將輸出
object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
範例 3:宣告動態屬性
<?php
$obj = new stdClass();
$obj->foo = 42;
$obj->{1} = 42;
var_dump($obj);
以上範例將輸出
object(stdClass)#1 (2) { ["foo"]=> int(42) ["1"]=> int(42) }
在 PHP8 中,這已變更
https://php.dev.org.tw/manual/en/migration80.incompatible.php
許多警告已轉換為錯誤例外
嘗試寫入非物件的屬性。先前這會為 null、false 和空字串隱式建立 stdClass 物件。
因此,如果您要將屬性新增至 $var,您需要先將其設為 stdClass()
$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;