PHP 日本研討會 2024

stdClass 類別

(PHP 4, PHP 5, PHP 7, PHP 8)

簡介

一個具有動態屬性的通用空類別。

此類別的物件可以使用 new 運算子實例化,或者透過強制轉型為物件建立。一些 PHP 函數也會建立此類別的實例,例如 json_decode()mysqli_fetch_object()PDOStatement::fetchObject()

儘管沒有實作 __get()/__set() 魔術方法,此類別允許動態屬性,並且不需要 #[\AllowDynamicProperties] 屬性。

這不是一個基礎類別,因為 PHP 沒有通用基礎類別的概念。但是,可以建立一個繼承自 stdClass 的自訂類別,因此可以繼承動態屬性的功能。

類別概要

class 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)
}
新增筆記

使用者貢獻筆記 1 筆筆記

9
Mats M
1 年前
在 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;
To Top