Artikelformat

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:

1
2
$a = array("apfel", "banane", "kiwi");
var_dump($a);
1
2
3
4
5
6
7
8
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:

1
2
$b = (object)$a;
var_dump($b);
1
2
3
4
5
6
7
8
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:

1
2
3
4
5
$a2 = array("apfel" => TRUE, "banane" => FALSE, "kiwi" => TRUE);
var_dump($a2);
 
$b2 = (object)$a2;
var_dump($b2);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.

1
2
$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.

1 Kommentar

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.