Wie wir wissen, ist das Erstellen anonymer Objekte in JavaScript wie im folgenden Code einfach:
var object = {
p : "value",
p1 : [ "john", "johnny" ]
};
alert(object.p1[1]);
Ausgabe:
an alert is raised with value "johnny"
Kann dieselbe Technik in PHP angewendet werden? Können wir anonyme Objekte in PHP erstellen?
Antworten:
Es ist einige Jahre her, aber ich denke, ich muss die Informationen auf dem neuesten Stand halten!
Seit PHP 7 ist es möglich, anonyme Klassen zu erstellen, sodass Sie folgende Aktionen ausführen können:
Weitere Informationen hierzu finden Sie im Handbuch
Ich weiß jedoch nicht, wie ähnlich es JavaScript implementiert ist, daher kann es einige Unterschiede zwischen anonymen Klassen in JavaScript und PHP geben.
quelle
"Anonym" ist nicht die richtige Terminologie, wenn es um Objekte geht. Es wäre besser zu sagen "Objekt vom anonymen Typ " , aber dies gilt nicht für PHP.
Alle Objekte in PHP haben eine Klasse. Die "Standard" -Klasse ist
stdClass
, und Sie können Objekte davon auf folgende Weise erstellen:Sie können auch ein Array in ein Objekt umwandeln, um eine bequemere Syntax zu erhalten:
Beachten Sie jedoch, dass das Umwandeln eines Arrays in ein Objekt wahrscheinlich "interessante" Ergebnisse für Array-Schlüssel liefert, die keine gültigen PHP-Variablennamen sind. Hier ist beispielsweise eine Antwort von mir, die zeigt, was passiert, wenn Schlüssel mit Ziffern beginnen.
quelle
Ja, es ist möglich! Verwenden dieser einfachen PHP Anonymous Object- Klasse. Wie es funktioniert:
Natürlich ist dieses Objekt eine Instanz der
AnObj
Klasse, daher ist es nicht wirklich anonym, aber es ermöglicht es, Methoden im laufenden Betrieb zu definieren, wie dies bei JavaScript der Fall ist.quelle
Bis vor kurzem habe ich auf diese Weise Objekte im laufenden Betrieb erstellt.
Dann:
Aber jetzt gehe ich mit:
Dann wie vorher:
Wenn Sie die Eigenschaften und Werte bereits kennen, können Sie sie natürlich wie erwähnt festlegen:
NB: Ich weiß nicht, auf welchen PHP-Versionen dies funktioniert, daher müssen Sie sich dessen bewusst sein. Ich denke jedoch, dass der erste Ansatz (der auch kurz ist, wenn beim Erstellen keine Eigenschaften festgelegt werden müssen) für alle Versionen mit json_encode / json_decode funktionieren sollte
quelle
Array in Objekt konvertieren (dies ist jedoch für Unterkinder nicht rekursiv):
quelle
Wenn Sie JavaScript imitieren möchten, können Sie eine Klasse erstellen
Object
und erhalten so das gleiche Verhalten. Natürlich ist das nicht mehr ganz anonym, aber es wird funktionieren.Das wird Element 2 ausgeben . Dies wurde aus einem Kommentar zu PHP gestohlen : Klassen und Objekte .
quelle
Die Unterstützung für anonyme Klassen ist seit PHP 7.0 verfügbar und entspricht am ehesten dem in der Frage angegebenen JavaScript-Beispiel.
Die Sichtbarkeitserklärung für Eigenschaften kann nicht weggelassen werden (ich habe sie nur verwendet,
var
weil sie kürzer als istpublic
.)Wie bei JavaScript können Sie auch Methoden für die Klasse definieren:
quelle
Aus der PHP-Dokumentation einige weitere Beispiele:
$ obj1 und $ obj3 sind vom gleichen Typ, aber $ obj1! == $ obj3. Außerdem werden alle drei json_encode () für ein einfaches JS-Objekt {} verwenden:
Ausgänge:
https://www.php.net/manual/en/language.types.object.php
quelle
Wenn Sie ein Objekt (wie in Javascript) mit dynamischen Eigenschaften erstellen möchten, ohne eine Warnung vor undefinierten Eigenschaften zu erhalten, wenn Sie keinen Wert für property festgelegt haben
quelle
Nein - da Javascript Prototypen / direkte Deklaration von Objekten verwendet - kann in PHP (und vielen anderen OO-Sprachen) ein Objekt nur aus einer Klasse erstellt werden.
Die Frage lautet also: Können Sie eine anonyme Klasse erstellen?
Wieder lautet die Antwort nein - wie würden Sie die Klasse instanziieren, ohne darauf verweisen zu können?
quelle
Object var = new Object() { ... };
- C ++:class { ... } var;
Für jemanden, der ein rekursives Objekt will:
quelle
Anoynmus-Objekt- Wiki
quelle