Mein heutiger Artikel wird wohl etwas kürzer und übersichtlicher ausfallen, da wir “nur” das Interface ArrayAccess zu unserem Custom_Model implementieren werden.
Das Interface schreibt genau vier Methoden vor, durch die wir ein Objekt wie ein Array verwenden können.
Zuerst passen wir das Interface Custom_Model_Interface an, indem wir ArrayAccess erweitern.
<?php
interface Custom_Model_Interface
extends ArrayAccess
{
}
Danach müssen wir in der Klasse Custom_Model die entsprechenden Methoden implementieren.
<?php
class Custom_Model implements Custom_Model_Interface
{
public function offsetExists() {}
public function offsetGet() {}
public function offsetSet() {}
public function offsetUnset() {}
}
Wer bei den letzten Artikeln aufgepasst hat, der wird wissen, was nun folgt. Genau, wir können bereits vorhandenen Code nutzen und müssen die Aufrufe nur weiterleiten.
public function offsetExists($offset)
{
return $this->keyExists($offset);
}
public function offsetGet($offset)
{
return $this->_get($offset);
}
public function offsetSet($offset, $value)
{
return $this->_set($offset, $value);
}
public function offsetUnset($offset)
{
// ...
}
Das war es auch schon. Nun können wir das Model auch mit der Array-Schreibweise verwenden.
$model['id'] = 42; echo $model['id'];
Da wir auch in diesem Zusammenhang wieder ein Unset dabei haben, könnte man überlegen, auch dafür eine eigene interne Methode anzulegen, um die Verarbeitung zu vereinheitlichen.
protected _unset($key)
{
// Loggen oder was auch immer
}
Beim nächsten Mal geht es dann darum, das Iterator-Interface zu verbauen, bevor unser Objekt observerfähig wird.

Pingback: Es ist ein Model und es sieht gut aus « ebene7
Pingback: Es ist ein Model und es sieht gut aus – Die Magie – Part 1 « ebene7