Start · Sprachen · PHP · Referenz · stdClass

stdClass

Klasse

Generische, leere PHP-Klasse, die als flexibler Datencontainer mit dynamischen Eigenschaften dient.

seit PHP 4.0.0 Kategorie: misc

Signatur

class stdClass

Beschreibung

stdClass ist PHPs eingebaute Basisklasse für generische Objekte. Sie besitzt keine vordefinierten Eigenschaften oder Methoden und dient hauptsächlich als leichtgewichtiger Datencontainer, dem zur Laufzeit beliebige Eigenschaften zugewiesen werden können. Dies macht sie zu einer flexiblen Alternative zu assoziativen Arrays, wenn ein objektorientierter Zugriff (via ->) gewünscht wird.

Ein typischer Einsatzfall ist das Ergebnis von json_decode(): Ohne den Parameter true (Array-Modus) gibt diese Funktion stdClass-Objekte zurück, die die JSON-Struktur widerspiegeln. Auch json_encode() und Datenbankabfragen via PDO (FETCH_OBJ) nutzen stdClass intern. Ebenso wandelt das Casten eines Arrays mit (object) dieses in ein stdClass-Objekt um.

Dynamische Eigenschaften: Anders als bei normalen Klassen kann man stdClass-Instanzen jederzeit neue Eigenschaften hinzufügen, ohne dass eine Klassen-Definition erforderlich ist. Das ist praktisch für schnelle Datentransfer-Objekte (DTOs). Ab PHP 8.2 lösen dynamische Eigenschaften bei regulären Klassen eine Deprecation-Warnung aus – stdClass ist davon jedoch explizit ausgenommen und unterstützt sie weiterhin ohne Einschränkung.

Für komplexe Anwendungen mit fester Struktur sollten eigene Klassen oder readonly-Klassen (PHP 8.2+) bevorzugt werden, da stdClass keine Typ-Sicherheit, keine Methoden und keine IDE-Autovervollständigung bietet.

Beispiele

Einfaches stdClass-Objekt manuell erstellen

<?php
$person = new stdClass();
$person->name = 'Anna';
$person->alter = 30;
$person->aktiv = true;

echo $person->name . ' ist ' . $person->alter . ' Jahre alt.';
// Eigenschaften können auch dynamisch gelesen werden
foreach ((array) $person as $key => $value) {
    echo $key . ': ' . var_export($value, true) . PHP_EOL;
}
Anna ist 30 Jahre alt. name: 'Anna' alter: 30 aktiv: true

JSON dekodieren und als stdClass verwenden

<?php
$json = '{"produkt": "Laptop", "preis": 999.99, "tags": ["elektronik", "computer"]}';

// json_decode gibt standardmäßig ein stdClass-Objekt zurück
$data = json_decode($json);

echo $data->produkt . ' kostet ' . $data->preis . ' EUR.' . PHP_EOL;
echo 'Erstes Tag: ' . $data->tags[0] . PHP_EOL;

// Prüfen ob eine Eigenschaft existiert
if (isset($data->preis)) {
    echo 'Preis ist gesetzt.' . PHP_EOL;
}
Laptop kostet 999.99 EUR. Erstes Tag: elektronik Preis ist gesetzt.

Array in stdClass umwandeln mit (object)-Cast

<?php
$daten = [
    'vorname' => 'Max',
    'nachname' => 'Muster',
    'email' => 'max@example.com',
];

$obj = (object) $daten;

echo $obj->vorname . ' ' . $obj->nachname . PHP_EOL;
echo get_class($obj); // stdClass
Max Muster stdClass

// Wichtig · Fallstricke

PHP 8.2 und dynamische Eigenschaften: Ab PHP 8.2 sind dynamische Eigenschaften bei eigenen Klassen deprecated (und seit PHP 9.0 voraussichtlich entfernt). stdClass ist von dieser Regel explizit ausgenommen und darf weiterhin dynamisch befüllt werden. Klassen, die dynamische Eigenschaften benötigen, sollten das Attribut #[AllowDynamicProperties] verwenden.

Keine Typ-Sicherheit: Da stdClass keine feste Struktur hat, bieten IDEs keine Autovervollständigung für ihre Eigenschaften. In größeren Projekten ist es daher ratsam, eigene DTO-Klassen oder readonly-Klassen zu definieren, um Lesbarkeit und Wartbarkeit zu verbessern.

Verschachtelte JSON-Strukturen: Bei tief verschachtelten JSON-Objekten liefert json_decode() verschachtelte stdClass-Objekte. Der Zugriff auf nicht existierende Eigenschaften ergibt null (mit einer PHP-Notice in älteren Versionen), daher sollte stets isset() oder der Null-Coalescing-Operator ?? verwendet werden.