PHP Conference Nagoya 2025

Die Klasse stdClass

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

Einführung

Eine generische leere Klasse mit dynamischen Eigenschaften.

Objekte dieser Klasse können mit dem Operator new instanziiert oder durch Konvertierung in ein Objekt erzeugt werden. Auch mehrere PHP-Funktionen erzeugen Instanzen dieser Klasse, z. B. json_decode(), mysqli_fetch_object() oder PDOStatement::fetchObject().

Obwohl diese Klasse die magischen Methoden __get()/__set() nicht implementiert, lässt sie dynamische Eigenschaften zu und benötigt das Attribut #[\AllowDynamicProperties] nicht.

Da PHP kein Konzept einer universellen Basisklasse hat, handelt es sich hierbei nicht um eine Basisklasse. Es ist jedoch möglich, eine benutzerdefinierte Klasse zu erstellen, die von stdClass erweitert wird und dadurch die Funktionalität der dynamischen Eigenschaften erbt.

Klassenbeschreibung

class stdClass {
}

Diese Klasse hat weder Methoden noch Standardeigenschaften.

Beispiele

Beispiel #1 Erzeugt durch eine Typumwandlung in ein Objekt

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Beispiel #2 Erzeugt mittels json_decode()

<?php
$json
= '{"foo":"bar"}';
var_dump(json_decode($json));

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Beispiel #3 Deklarieren dynamischer Eigenschaften

<?php
$obj
= new stdClass();
$obj->foo = 42;
$obj->{1} = 42;
var_dump($obj);

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

object(stdClass)#1 (2) {
  ["foo"]=>
  int(42)
  ["1"]=>
  int(42)
}
add a note

User Contributed Notes 1 note

up
3
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