PHP 8.4.2 Released!

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 オブジェクトへの型変換を使い、stdClass を作る

<?php
$obj
= (object) array('foo' => 'bar');
var_dump($obj);

上の例の出力は以下となります。

object(stdClass)#1 (1) {
  ["foo"]=>
  string(3) "bar"
}

例2 json_decode() によって、stdClass を作る

<?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)
}
add a note

User Contributed Notes 1 note

up
9
Mats M
1 year ago
In PHP8 this has been changed

https://www.php.net/manual/en/migration80.incompatible.php

A number of warnings have been converted into Error exceptions:

Attempting to write to a property of a non-object. Previously this implicitly created an stdClass object for null, false and empty strings.

So if you add properties to a $var, you first need to make it a stdClass()

$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;
To Top