Das ArrayObject in der SPL

Endlich mal wieder etwas Neues vom Marcel. Ich muss mich auch direkt mal wegen des unregelmäßigen Erscheinens von Artikeln entschuldigen. Ich gelobe Besserung … wirklich! Aber nun zu unserem eigentlichen Thema: Das ArrayObject aus der Standard PHP Library.

Das ArrayObject ist bei Weitem kein Wunderwerk, erleichtert aber doch die Arbeit im objektorientierten Umfeld und ist in einigen Bereichen sogar schneller, als das einfacher Array Handling über die bisher bekannten PHP Array Funktionen. Zudem implementiert es wesentliche Interfaces aus der SPL, um das Handling innerhalb des ArrayObject so komfortabel wie möglich zu gestalten.

Beispiele

// Ein ganz normales Array
$besatzung = array(
	'Kapitaen' => 'Marcel',
	'Maat' => 'Johannes',
	'Matrose' => 'Hendrik'
);

// Wir weisen unser ArrayObject an die Inhalte des Array als 
// Eigenschaften zu behandeln
$besatzungObject = new ArrayObject($besatzung, ArrayObject::ARRAY_AS_PROPS);

// Hinzufügen von Werten
$besatzungObject->Smutje = 'Fabian';

// Ausgabe: Hendrik
echo $besatzungObject->Matrose;

In diesem Beispiel erstellen wir ein einfaches ArrayObject mit einem simplen Array. Der zweite Parameter gibt an, wie die Array Inhalte behandelt werden sollen. In diesem Beispiel behandeln wir die Array Inhalte wie Eigenschaften einer Klasse, was aus dem objektorientierten Blickwinkel Sinn macht.

// Das Array mit dem Iterator durchlaufen
// Ausgabe: Marcel ist ein Kapitaen, etc.
$iterator = $besatzungObject->getIterator();
while ($iterator->valid()) {
	echo $iterator->current() . ' ist ein ' . $iterator->key() . "
"; $iterator->next(); }

Hier durchlaufen wir das Array mit der Methode ArrayObject::getIterator(), welche ein ArrayIterator Objekt zurück gibt, mit dem wir durch das ganze Array iterieren können. Ich persönlich finde das ziemlich praktisch, zumal ich auch direkt beim Erzeugen einer ArrayObject Instanz mit einem dritten Parameter meine ArrayIterator Klasse benennen kann. In unserem Beispiel haben wir keinen dritten Parameter angegeben. Somit ist die ArrayIterator Klasse als Standard hinterlegt.

Besonderheiten

// erzeugt einen Fehler
echo implode(",", array_values($besatzungObject));

// so wird's richtig gemacht
$meineBesatzung = (array) $besatzungObject;
echo implode(", ", array_values($meineBesatzung));

Einfache PHP Array Funktionen können nicht ohne Weiteres auf ein ArrayObject angewendet werden. Hierzu muss das ArrayObject erst per expliziter Typisierung als Array gekennzeichnet werden. Erst dann greifen die PHP Array Funktionen wieder problemlos.

Zusammengefasst gleicht das ArrayObject eher einer genaueren Typisierung von Arrays innerhalb des objektorientierten Kontexts. Auf jeden Fall kann ich somit Arrays und sogar Objekte wie Arrays behandeln. Die Iterator Funktionalitäten sind verdammt schnell. Lediglich die etwas umständliche Einbindung der Standard Array Funktionen bremst ein wenig aus. Wirklich Sinn macht dieser Teil der SPL aber erst, wenn man sich in der objektorientierten Programmierung bewegt.

Was meint Ihr zum ArrayObject?

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.