2016-10-15 6 views
-2

ich sah, dass die Umwandlung von einer Klasseninstanz (Objekt) zu assoziativer Array ist ein einfacher Guss:PHP Assoc Array Klasseninstanz

$array = (array) $yourObject; 

Wenn ich also Klasse A habe und eine assoziative Array contaning die neccesary Felder ein Objekt der Klasse A zu füllen würde ausreichen, um das Gegenteil zu tun? z. B.

$aInstance=(A)$assocArray; 

Wenn nicht, was ist der einfachste Weg?

+0

Nun, _did Sie it_ versuchen? – arkascha

+0

@arkascha kein Gedanke, ich würde zuerst fragen –

+2

Mögliche Duplikate von [Typ Casting für benutzerdefinierte Objekte] (http://StackOverflow.com/Questions/1147109/Type-casting-for-user-defined-objects) –

Antwort

1

Dinge sind nicht so einfach, da gibt es keine Möglichkeit für PHP irgendwie magisch erraten, was mit den Werten dieses Array zu tun. Objekte sind eine strukturierte Menge von Daten im Gegensatz zu einem Array. Sie benötigen also eine Beschreibung der Struktur und Regeln, wie Sie sie verwenden können.

Sie müssen einen Konstruktor in der Klassendefinition implementieren, dann können Sie ein neues Objekt basierend auf einem bestimmten Array erstellen. Werfen Sie einen Blick auf diese willkürliches Beispiel:

<?php 
class A { 
    protected $title; 
    protected $data; 
    public function __construct ($data) { 
     $this->title = $data['title']; 
     $this->data = sprintf('this is foo: %s', $data['foo']); 
    } 
    public function __toString() { 
     return sprintf(
      "I am an object titled '%s'\nI hold that foo value: %s\n", 
      $this->title, 
      $this->data 
     ); 
    } 
} 

$data = [ 
    'title' => 'hello world', 
    'foo' => 'foovalue', 
    'bar' => 'barvalue' 
]; 
$object = new A($data); 
echo $object; 
var_dump($object); 

Die offensichtliche Ausgabe lautet:

I am an object titled 'hello world' 
I hold that foo value: this is foo: foovalue 
/home/arkascha/test.php:25: 
class A#1 (2) { 
    protected $title => 
    string(11) "hello world" 
    protected $data => 
    string(21) "this is foo: foovalue" 
} 
+0

würde es für mich Sinn machen, dass es für phps Schöpfer nicht schwierig wäre zu erraten, dass ein Cascading eines assoziativen Arrays zu einer Klasseninstanz versuchen würde, eine neue Instanz dieser Klasse zu erstellen, die alle Felder unter Verwendung von Feldnamen als Schlüssel füllt. das macht nur Sinn. jetzt jede Klasse, die ich mache ich muss Code kopieren ... aber danke! –

+0

@OfekRon Nein, das ist nicht die Idee hinter der objektorientierten Programmierung. Was Sie beschreiben, ist genau, was Arrays sind. Warum dieses Prinzip mit Objekten verdoppeln? Das macht keinen Sinn, im Gegenteil, es motiviert nur, OOP nicht zu nutzen, sondern Objekte als dumme, passive Datencontainer zu benutzen. – arkascha

+0

Es kann für einige Anwendungsfälle sinnvoll sein, die meisten Anwendungsfälle für mich. ist möglicherweise nicht sinnvoll, wenn Ihre Variablen privat sind und Sie eine gewisse Logik bei den Settors ausführen. aber ich denke, dass eine Standardoperation hier hilfreich sein könnte. Wie auch immer, ich habe den Costructor benutzt, wie Sie es vorgeschlagen haben. Danke –

Verwandte Themen