Zum Inhalt springen

Objekte und Arrays

PHP schafft es immer wieder mich zu überraschen. Ich wollte in einem privaten Projekt von einem Array die Daten in ein Objekt überführen. Also erwartet man nun, dass man über das Array läuft (bspw mit foreach) und das Objekt mit Daten befüllt. PHP kann das ganze aber auch sehr viel einfacher machen.

Zuerst benötigen wir ein Array. Da es einen Kälteeinbruch gab, nehmen wir ein Array mit Obst. Und lassen uns auch gleich einen Dump der Variable ausgeben:

$a = array("apfel", "banane", "kiwi");
var_dump($a);
array(3) {
  [0]=>
  string(5) "apfel"
  [1]=>
  string(6) "banane"
  [2]=>
  string(4) "kiwi"
}

Sowiet ist das ganze recht langweilig und ein fester Bestandteil des Entwickleralltags. Jetzt wandeln wir dieses Array in ein Objekt um und schreiben auch hier wieder ein Dump der Variable raus, damit man sieht, dass wir wirklich ein Objekt haben:

$b = (object)$a;
var_dump($b);
object(stdClass)#1 (3) {
  [0]=>
  string(5) "apfel"
  [1]=>
  string(6) "banane"
  [2]=>
  string(4) "kiwi"
}

Das war ja richtig einfach. Benutzt man nun ein assoziatives Array, dann sieht das ganze so aus:

$a2 = array("apfel" => TRUE, "banane" => FALSE, "kiwi" => TRUE);
var_dump($a2);

$b2 = (object)$a2;
var_dump($b2);
array(3) {
  ["apfel"]=>
  bool(true)
  ["banane"]=>
  bool(false)
  ["kiwi"]=>
  bool(true)
}
object(stdClass)#2 (3) {
  ["apfel"]=>
  bool(true)
  ["banane"]=>
  bool(false)
  ["kiwi"]=>
  bool(true)
}

Nun schauen wir uns einen Weg an, wie man ein Array objektorientiert nutzen kann. Hierfür kann man aus der SPL das ArrayObject benutzen. Diese Klasse bietet einige der herkömmlichen Funktionen zur Arraymanipulation als Methoden an. Wenn man sowieso eine saubere objektorienterte Struktur aufgebaut hat, kann man so auch die Arrays versorgen.

$ao = new ArrayObject($a2);
echo $ao->count();

Die Ausgabe ist, wie man erwartet, genau 3. Spannend ist auch der Umgang mit den Schlüsseln des Arrays. Man prüft ja üblicherweise mit isset ob ein Schlüssel gesetzt ist, löscht ihn mit unset und greift ja über die eckigen Klammern auf den Wert zu. Bei dem ArrayObject gibt es hierfür die offset* Methoden. Mit diesen kann man einen Schlüssel mit einem Wert verknüpfen, diesen auch auslesen oder löschen und natürlich auch überprüfen, ob er existiert. Das ganze auf einer sauberen objektorientierten Ebene.

Published inAllgemein

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close