Bitte definieren Sie was stdClass
ist.
1049
stdClass
ist die generische leere Klasse von PHP, ähnlich wie Object
in Java oder object
Python ( Bearbeiten: wird jedoch nicht als universelle Basisklasse verwendet; danke @Ciaran für den Hinweis ).
Es ist nützlich für anonyme Objekte, dynamische Eigenschaften usw.
Eine einfache Möglichkeit, die StdClass zu betrachten, ist eine Alternative zum assoziativen Array. Das folgende Beispiel zeigt, wie json_decode()
eine StdClass-Instanz oder ein assoziatives Array abgerufen werden kann. Auch in diesem Beispiel nicht gezeigt, SoapClient::__soapCall
gibt eine StdClass-Instanz zurück.
<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42
Weitere Beispiele finden Sie unter Dynamische Eigenschaften in PHP und StdClass .
{}
Konstrukt von JavaScript ist .function(StdClass $a, array $params)
überprüfen, ob$a
es sich um ein Objekt handelt undinstanceof
.stdClass
ist nur eine generische 'leere' Klasse, die verwendet wird, wenn andere Typen in Objekte umgewandelt werden. Trotz der beiden anderen AntwortenstdClass
ist dies nicht die Basisklasse für Objekte in PHP. Dies kann ziemlich leicht demonstriert werden:Ich glaube nicht, dass es in PHP ein Konzept für ein Basisobjekt gibt
quelle
stdClass ist eine weitere großartige PHP-Funktion. Sie können eine anonyme PHP-Klasse erstellen. Schauen wir uns ein Beispiel an.
Denken Sie jetzt, Sie haben eine andere Klasse, die mit einem Seitenobjekt initialisiert und darauf basierend ausgeführt wird.
Jetzt müssen Sie ein neues PageShow-Objekt mit einem Seitenobjekt erstellen.
Hier müssen Sie keine neue Klassenvorlage schreiben. Sie können einfach stdClass verwenden, um eine Klasse im laufenden Betrieb zu erstellen.
quelle
stdClass
.Erwähnenswert ist auch, dass ein
stdClass
Objekt auch aus der Verwendung von erstellt werden kannjson_decode()
.quelle
True
. Boolesche Werte sind Kleinbuchstabentrue
oderfalse
.Mit stdClass können Sie ein neues Objekt mit eigenen Eigenschaften erstellen. Betrachten Sie das folgende Beispiel, das die Details eines Benutzers als assoziatives Array darstellt.
Wenn Sie dieselben Details wie die Eigenschaften eines Objekts darstellen müssen, können Sie stdClass wie folgt verwenden .
Wenn Sie ein Joomla-Entwickler sind, lesen Sie dieses Beispiel in den Joomla-Dokumenten, um weitere Informationen zu erhalten.
quelle
Gleichfalls,
ergibt ein stdClass-Objekt - automatisch umgewandelt
Ich habe das heute durch Rechtschreibfehler herausgefunden:
Cool!
quelle
stdClass ist keine anonyme Klasse oder ein anonymes Objekt
Die Antworten hier enthalten Ausdrücke,
stdClass
die eine anonyme Klasse oder sogar ein anonymes Objekt sind. Es ist nicht wahr.stdClass
ist nur eine reguläre vordefinierte Klasse. Sie können dies mit deminstanceof
Operator oder der Funktion überprüfenget_class
. Hier geht nichts Besonderes. PHP verwendet diese Klasse, wenn andere Werte in Objekte umgewandelt werden.In vielen Fällen, in denen
stdClass
das Programm von den Programmierern verwendet wird, ist das Array aufgrund nützlicher Funktionen und der Tatsache, dass dieser Anwendungsfall die Datenstruktur kein reales Objekt darstellt, die bessere Option.quelle
Es ist auch erwähnenswert, dass Sie mit Casting kein Objekt erstellen müssen, wie in der Antwort von @Bandula angegeben. Stattdessen können Sie Ihr Array einfach in ein Objekt umwandeln und die stdClass wird zurückgegeben. Zum Beispiel:
Output: again
quelle
Eigentlich habe ich versucht, eine leere stdClass zu erstellen und die Geschwindigkeit mit einer leeren Klasse verglichen.
Anschließend wurden 1000 stdClasses und emps erstellt. Leere Klassen wurden in etwa 1100 Mikrosekunden erstellt, während stdClasses über 1700 Mikrosekunden dauerte. Ich denke, es ist besser, eine eigene Dummy-Klasse zum Speichern von Daten zu erstellen, wenn Sie Objekte dafür so schlecht verwenden möchten (Arrays sind sowohl beim Schreiben als auch beim Lesen viel schneller).
quelle
Verwendete stdClass-Objekte
Mit der stdClass können Sie anonyme Klassen erstellen und mit Objekt-Casting auch auf Schlüssel eines assoziativen Arrays im OOP-Stil zugreifen. Genau wie Sie auf die reguläre Objekteigenschaft zugreifen würden.
Beispiel
wird widerhallen
quelle
Wenn Sie schnell ein neues Objekt erstellen möchten, das einige Daten zu einem Buch enthält. Sie würden so etwas tun:
Weitere Informationen finden Sie auf der Website unter http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ .
quelle
Bitte beachten Sie, dass 2 leere stdClasses nicht unbedingt gleich sind. Dies ist sehr wichtig, wenn Sie spöttische Erwartungen schreiben.
quelle
Das Handbuch zu php.net enthält einige solide Erklärungen und Beispiele, die von Benutzern von stdClass beigesteuert wurden. Besonders gut gefällt mir dieses Handbuch http://php.net/manual/en/language.oop5.basic.php#92123 , https: // stackoverflow.com/a/1434375/2352773 .
quelle
Standardklasse ist eine Art und Weise, in der die php Vermeiden Sie es, die Interpretation des Skripts zu beenden, wenn Daten in eine Klasse eingefügt werden müssen. Leider wurde diese Klasse nicht definiert
Beispiel:
Hier werden die Daten in die vordefinierten 'Aufgaben' gestellt. Aber wenn wir den Code so gemacht hätten:
dann ist die php wird die Ergebnisse in setzen Standardklasse .
einfach phpsagt das: schau, wir haben ein gutes KINDER [Objekte] Hier aber ohne Eltern. Also werden wir sie in ein Kinderbetreuungsheim schickenStandardklasse :) :)
quelle
Sie können auch
object
Arrays in ein Objekt Ihrer Wahl umwandeln:Um nun ein Objekt vom Typ zu erstellen
Example
und zu initialisieren, haben Sie folgende Möglichkeiten:ODER
Die zweite Methode ist hauptsächlich nützlich, um Objekte mit vielen Eigenschaften zu initialisieren.
quelle
stClass ist eine leere Klasse, die von PHP selbst erstellt wurde und nur von PHP verwendet werden sollte, da es sich nicht nur um eine "leere" Klasse handelt. PHP verwendet stdClass, um Arrays in den Objektstil zu konvertieren, wenn Sie stdClass verwenden müssen. Ich empfehle zwei bessere Optionen : 1- Verwenden Sie Arrays (viel schneller als Klassen) 2- Erstellen Sie Ihre eigene leere Klasse und verwenden Sie sie
Was bringt jemanden dazu, über die Verwendung des Objektstils anstelle des Array-Stils nachzudenken?
quelle
Der Grund, warum wir stdClass haben, ist, dass es in PHP keine Möglichkeit gibt, ein normales Array von einem zugeordneten Array zu unterscheiden (wie in Javascript, das Sie
{}
für Objekt und[]
Array haben, um sie zu unterscheiden).Dies schafft also ein Problem für leere Objekte. Nehmen Sie das zum Beispiel.
PHP:
Angenommen, Sie möchten die Variable $ c mit JSON codieren
Angenommen, Sie haben alle Schlüssel gelöscht
$b
, um sie leer zu machen. Da$b
es jetzt leer ist (Sie haben alle Schlüssel gelöscht, erinnern Sie sich?), Sieht es so aus, als könnte es[]
sich entweder um ein Array oder ein Objekt handeln, wenn Sie es betrachten.Wenn Sie also erneut einen json_encode ausführen, ist die Ausgabe anders
Dies ist ein Problem, da wir wissen,
b
dass dies ein assoziiertes Array sein sollte, PHP (oder eine Funktion wie json_encode) jedoch nicht.Also kommt stdClass zur Rettung. Nehmen Sie noch einmal das gleiche Beispiel
Selbst wenn Sie jetzt alle Schlüssel aus löschen
$b
und leer machen, spielt es keine Rolle, da es sich um eine stdClass handelt. Wenn Sie json_encode verwenden, erhalten Sie Folgendes:Dies ist auch der Grund, warum
json_encode
undjson_decode
standardmäßig stdClass zurückgegeben wird.quelle