mit einem neuen Array mache ich das:
$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";
Gibt es eine ähnliche Syntax für ein Objekt?
(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";
$var = (object) (boolean) (string) (int) (array) new StdClass;
Sie wissen, nur um sicher zu gehen.Arrays - How to define an empty object in PHP
. Hat nichts mit Arrays zu tunAntworten:
Ein Kommentar im Handbuch fasst es am besten zusammen:
quelle
stdClass
in meinem Kopf als "Standardklasse"new \stdClass();
PHP Namespace DocstdClass()
das Wort erinnern kannstAIDS
?Die Standardmethode zum Erstellen eines "leeren" Objekts ist:
Aber mit PHP> = 5.4 bevorzuge ich persönlich :
Es ist kürzer und ich persönlich halte es für klarer, weil stdClass für unerfahrene Programmierer irreführend sein könnte (dh "Hey, ich möchte ein Objekt, keine Klasse!" ...).
Das gleiche mit PHP <5.4 ist:
(object)[]
ist äquivalent zunew stdClass()
.Siehe das PHP-Handbuch ( hier ):
und ( hier ):
Denken Sie jedoch daran, dass leer ($ oVal) false zurückgibt , wie @PaulP sagte:
In Bezug auf Ihr Beispiel, wenn Sie schreiben:
PHP erstellt die folgende Warnung und erstellt implizit die Eigenschaft
key1
(ein Objekt selbst).Dies kann ein Problem sein, wenn Ihre Konfiguration (siehe Fehlerberichterstattungsstufe ) diese Warnung dem Browser anzeigt. Dies ist ein weiteres ganzes Thema, aber ein schneller und schmutziger Ansatz könnte darin bestehen, den Fehlerkontrolloperator (@) zu verwenden, um die Warnung zu ignorieren:
quelle
stdClass
tut.stdClass
tut. Ich habestdClass
den Code verwendet, der die Frage beantwortet. Es tut mir leid, aber ich schaffe kein neues Problem, das war meine persönliche Meinung (wie ich schrieb).(object) []
Ich möchte darauf hinweisen, dass es in PHP kein leeres Objekt im Sinne gibt:
aber natürlich wird $ obj leer sein.
Andererseits bedeutet leeres Array in beiden Fällen leer
Zitat aus Changelog-Funktion leer
quelle
php.net sagte, es sei am besten:
quelle
Ich finde es toll, wie einfach es ist, Objekte anonymen Typs in JavaScript zu erstellen:
Deshalb versuche ich immer, diese Art von Objekten in PHP zu schreiben, wie es Javascript tut :
Da es sich jedoch im Grunde genommen um ein Array handelt, können Sie einer Eigenschaft keine anonymen Funktionen zuweisen, wie dies bei js der Fall ist:
Nun, Sie können es tun, aber IMO ist nicht praktisch / sauber:
Mit dieser Synthax können Sie auch einige lustige Überraschungen finden , die jedoch in den meisten Fällen gut funktionieren.
quelle
Zusätzlich zu Zombats Antwort, wenn Sie immer wieder vergessen
stdClass
Jetzt können Sie Folgendes tun:
quelle
Sie können verwenden
new stdClass()
(was empfohlen wird):Oder Sie können ein leeres Array in ein Objekt konvertieren, das eine neue leere Instanz der integrierten Klasse stdClass erzeugt:
Sie können den
null
Wert auch in ein Objekt konvertieren, das eine neue leere Instanz der integrierten Klasse stdClass erzeugt:quelle
Um auf Daten in einer stdClass auf ähnliche Weise zuzugreifen, wie Sie es mit einem asoziativen Array tun, verwenden Sie einfach die Syntax {$ var}.
quelle
Wie andere bereits betont haben, können Sie stdClass verwenden. Ich denke jedoch, dass es ohne () sauberer ist, wie folgt:
Basierend auf der Frage scheint es jedoch so, als ob Sie wirklich in der Lage sein möchten, einem Objekt im laufenden Betrieb Eigenschaften hinzuzufügen. Sie müssen dafür keine stdClass verwenden, obwohl Sie dies können. Sie können wirklich jede Klasse verwenden. Erstellen Sie einfach eine Objektinstanz einer beliebigen Klasse und legen Sie die Eigenschaften fest. Ich mag es, meine eigene Klasse zu erstellen, deren Name einfach o ist, mit einigen grundlegenden erweiterten Funktionen, die ich in diesen Fällen gerne verwende, und die sich gut für die Erweiterung von anderen Klassen eignen. Im Grunde ist es meine eigene Basisobjektklasse. Ich möchte auch eine Funktion namens o () haben. Wie so:
Wenn Sie keinen eigenen Basisobjekttyp haben möchten, können Sie einfach o () eine neue stdClass zurückgeben lassen. Ein Vorteil ist, dass o leichter zu merken ist als stdClass und kürzer ist, unabhängig davon, ob Sie es als Klassennamen, Funktionsnamen oder beides verwenden. Selbst wenn Sie keinen Code in Ihrer o-Klasse haben, ist es immer noch einfacher, sich diesen zu merken als die umständlich großgeschriebene und benannte stdClass (die möglicherweise die Idee einer "sexuell übertragbaren Krankheitsklasse" hervorruft). Wenn Sie die Klasse o anpassen, finden Sie möglicherweise eine Verwendung für die Funktion o () anstelle der Konstruktorsyntax. Es ist eine normale Funktion, die einen Wert zurückgibt, der weniger begrenzt ist als ein Konstruktor. Beispielsweise kann ein Funktionsname als Zeichenfolge an eine Funktion übergeben werden, die einen aufrufbaren Parameter akzeptiert. Eine Funktion unterstützt auch die Verkettung. Sie können also Folgendes tun:
Dies ist ein guter Anfang für eine Basis- "Sprache", auf der andere Sprachebenen aufbauen können, wobei die oberste Ebene in vollständig internen DSLs geschrieben wird. Dies ähnelt dem Lisp-Stil der Entwicklung, und PHP unterstützt ihn viel besser, als die meisten Leute glauben. Mir ist klar, dass dies ein bisschen tangential für die Frage ist, aber die Frage berührt, was meiner Meinung nach die Basis für die vollständige Nutzung der Leistung von PHP ist.
quelle
Wenn Sie ein Objekt (wie in Javascript) mit dynamischen Eigenschaften erstellen möchten, ohne eine Warnung vor undefinierten Eigenschaften zu erhalten.
quelle
Sie können dies auch versuchen.
Ausgabe:
quelle
Verwenden Sie ein generisches Objekt und ordnen Sie ihm Schlüsselwertpaare zu.
Oder wandeln Sie ein Array in ein Objekt
quelle
Wenn Sie dies nicht tun möchten:
Sie können eine der folgenden Optionen verwenden:
PHP> = 5,4
PHP <5,4
quelle
Hier ein Beispiel mit der Iteration:
quelle
Sie haben diese schlechte, aber nützliche Technik:
quelle
stdClass ist das Standard-PHP-Objekt. stdClass hat keine Eigenschaften, Methoden oder Eltern. Es unterstützt keine magischen Methoden und implementiert keine Schnittstellen.
Wenn Sie einen Skalar oder ein Array als Objekt umwandeln, erhalten Sie eine Instanz von stdClass. Sie können stdClass verwenden, wenn Sie eine generische Objektinstanz benötigen.
stdClass ist KEINE Basisklasse! PHP-Klassen erben nicht automatisch von einer Klasse. Alle Klassen sind eigenständig, es sei denn, sie erweitern explizit eine andere Klasse. PHP unterscheidet sich in dieser Hinsicht von vielen objektorientierten Sprachen.
Sie können in Ihrem Code keine Klasse mit dem Namen 'stdClass' definieren. Dieser Name wird bereits vom System verwendet. Sie können eine Klasse mit dem Namen 'Objekt' definieren.
Sie könnten eine Klasse definieren, die stdClass erweitert, aber Sie würden keinen Vorteil erhalten, da stdClass nichts tut.
(getestet auf PHP 5.2.8)
quelle