Das ArrayObject
ermöglicht es, auf Arrays mit Objektfunktionen zu operieren. In dem unten abgebildeten PHP-Code ist zu sehen, wie aus einem Array ein ArrayObject
erstellt wird und Operationen auf diesem ausgeführt werden:
1 2 3 4 5 6 7 8 |
<?php $objWithArray = new ArrayObject(['eins','zwei','drei']); echo ($objWithArray->offsetGet(1)); // zwei echo ($objWithArray[0]); // eins echo ($objWithArray->offsetSet(3,'vier')); $objWithArray->append('fünf'); $objWithArray->asort(); // oder ->natsort() ?> |
Zunächst wird mit offsetGet()
der erste Eintrag abgefragt. Ein Zugriff könnte jedoch auch mit den eckigen Klammern, die schon aus dem Standard-Arrayzugriff bekannt sind, erfolgen. Mit offsetSet()
wird der dritte Eintrag gesetzt. Mit append()
werden Einträge angehängt. Die Funktionen asort()
oder auch natsort()
stellen die Sortierfunktionen dar und sortieren das ArrayObject
intern.
Gleichermaßen können auch aus Objekten ArrayObject
e erstellt werden. Die Variablen dieser Objekte entsprechen dann den Arraywerten:
1 2 3 4 5 6 7 8 9 10 11 |
<?php class ExampleClass { public $publicvar = 'ex'; protected $protectedvar = 'ex2'; private $privatevar = 'ex3'; } $objWithClass = new ArrayObject(new ExampleClass()); echo ($objWithClass->offsetGet('publicvar')); echo ($objWithClass['publicvar']); ?> |
Es existiert noch eine weitere Zugriffsmöglichkeit auf die Array-Werte. Sie können direkt als Properties des Objektes angesprochen werden. Dabei ist es möglich, die Properties wie folgt zu hinterlegen und wieder abzurufen:
1 2 3 4 |
<?php $objWithClass->prop = 'property'; echo ($objWithClass->prop); ?> |
Allerdings lässt sich auf diese Weise kein Zugriff auf die schon vorhandenen Werte der ExampleClass
durchführen. Dies ist möglich, wenn die Konstante ArrayObject::ARRAY_AS_PROPS
bei der Erzeugung angegeben wird:
1 2 3 4 |
<?php $objWithClass2 = new ArrayObject(new ExampleClass(),ArrayObject::ARRAY_AS_PROPS); echo ($objWithClass2->publicvar); // nun möglich ?> |
Zusätzlich existiert auch die Konstante ArrayObject::STD_PROP_LIST
. Sie sorgt dafür, dass Properties des Objektes ihre normale Funktionalität haben, wenn sie als Liste abgefragt werden.
Das ArrayObject
gibt dem Entwickler die Möglichkeit, über Arrays mit Hilfe eines Iterators zu iterieren:
1 2 3 4 5 6 7 8 9 |
<?php $objWithArray = new ArrayObject(['eins','zwei','drei']); $iterator = $objWithArray->getIterator(); while($iterator->valid()) { echo ($iterator->key()."=".$iterator->current()); $iterator->next(); } ?> |
Der Iterator ist ein wichtiges Konzept der objektorientierten Welt. Somit schlägt PHP mit Hilfe des ArrayObject
auf diese elegante Weise die Brücke zwischen der imperativen in die objektorientierte Welt.