PHP schreibt Objekte inline

7

Ich gehe davon weg, Arrays in PHP zu verwenden, weil Objekte so viel sauberer sind, und in PHP 5 gibt es keine Performance-Hits, wenn Objekte verwendet werden.

Zurzeit mache ich es so:

$object = (object) array('this' => 'that', 'foo' => (object) array('bar' => 123));

Allerdings finde ich es so mühsam, jedes Mal tippen zu müssen, wenn Typumwandlung nicht rekursiv ist ...

Gibt es irgendeinen Weg in php (oder wird es sein), es so oder ähnlich zu machen:

%Vor%     
user1821218 16.11.2012, 12:57
quelle

6 Antworten

16

Ab PHP 5.4 ist die Kurz-Array-Syntax verfügbar. So können Sie ein Array wie folgt initialisieren:

%Vor%

Es gibt keine kurze Objekt-Syntax in PHP ab PHP7. Sie können jedoch kurze Arraysyntax verwenden, um Objekte wie folgt zu erstellen:

%Vor%

Sieht viel schöner und kürzer aus als das folgende Konstrukt:

%Vor%     
Ivan Yarych 22.03.2016 15:29
quelle
4

Ich empfehle Ihnen, eine Funktionsbreite StdClass zu erstellen.

%Vor%     
David Gassama 16.11.2012 13:10
quelle
2

PHP unterstützt derzeit keine kurze Objektsyntax. Ab PHP 5.4 unterstützen sie kurze Arraysyntax. Vielleicht wird 5,5 enthalten, was Sie suchen.

Als Alternative:

Sie könnten Ihre Objekte als JSON erstellen und json_decode() verwenden:

%Vor%

Hinweis: Ich zeige dies nur als Demonstration einer Möglichkeit, Ihre Frage zu lösen. Ich befürworte keine solche Praxis.

    
Jason McCreary 16.11.2012 13:43
quelle
0

Leider gibt es keine Syntax, die stdClass Instanzen wie diese erzeugt. Aber Sie könnten das Schlüsselwort new und eine beliebige der Spl-Klassen verwenden (nicht viel aufgeräumter ich zugeben). Wenn Sie für Tastenanschläge optimieren möchten, könnten Sie eine kleine Hilfsfunktion wie folgt schreiben:

%Vor%

und schreibe

%Vor%     
complex857 16.11.2012 13:11
quelle
0

Obwohl ich ehrlich gesagt nicht verstehen kann, warum Sie das tun sollten ( assoziative Arrays sind im Wesentlichen reine Datenobjekte ), aber wenn Sie darauf bestehen:
Statt jeden einzelnen zu werfen Array, auf jeder einzelnen Ebene zu einem Objekt, können Sie den folgenden "trick / hack" verwenden :

%Vor%

Dies konvertiert alle Arrays in Instanzen von stdClass , was ich glaube, was Sie wollten.
Ich muss noch einmal sagen: PHP ist nicht JavaScript und Objekte sind in Sprachen wie PHP viel teurer (relativ gesehen), dann sind sie in JS. Ich würde dringend empfehlen, dass Sie mit assoziativen Arrays bleiben, wenn Sie kein Objekt benötigen.

Wie Objekte können Arrays -gekennzeichnet sein : function foo (array $argument){}
Wenn Sie sie wirklich in eine bestimmte Instanz einer Klasse umwandeln möchten, ändern Sie den -Konstruktor , um mit einem Array zu arbeiten:

%Vor%

Und fügen Sie weitere Methoden hinzu, die Sie dem Los hinzufügen möchten

    
Elias Van Ootegem 16.11.2012 13:29
quelle
0

Ich habe eine alternative Lösung, wenn Sie ein bereits gebautes Array erhalten. Nehmen wir an, Ihr Array enthält n verschachtelte Arrays, sodass Sie keine Chance haben, jedes auf einfache Weise zu implementieren. Dies würde den Trick tun:

%Vor%

Ich würde das nicht in einer großen Schleife oder etwas Ähnlichem verwenden, da es viel langsamer ist, als nur mit dem Array sintax zu kleben und damit zu leben. Auch wenn ein Element des Arrays eine Funktion oder ein anderes lustiges Ding ist, würde dies das brechen.

Beispielverwendung:

%Vor%     
santiago arizti 10.06.2016 17:03
quelle

Tags und Links