array vs. object

Arrays gehören wohl mit zu den Gründen, wegen denen PHP als anfängerfreundlich gilt. Als mir in der Schule mit Java das erste Mal eine andere Programmiersprache als PHP begegnet ist, war ich erstaunt über die wenigen Möglichkeiten, die mir die Arrays dort boten. Aber es soll hier nicht um einen Vergleich der Programmiersprachen gehen, sondern um die Probleme, die dieser Luxus bereiten kann.

In den letzten Tagen benötigte ich einige Klassen zur HTML-Generierung. Sie benötigten unter anderem Attribute, die zu einem String umgeformt werden sollten. Die Implementierung sah ungefähr so aus:

public function render()
{
    $attributes = array();
    foreach ($this->_attributes AS $key => $value) {
        $attributes[] = $key . '="' . $value . '"';
    }
    return '< ' . $this->_tag . ' ' . implode(' ', $attributes) . '>' . $this->_content . '_tag . '>';
}

Irgendwann war diese Klasse recht groß geworden und ich suchte nach Möglichkeiten, Teile auszulagern. Durch Zufall blätterte ich am Abend durch Martin Fowlers Refactoring und las darin Folgendes:

Wert durch Objekt ersetzen: Sie haben ein Datenelement, das zusätzliche Daten oder zusätzliches Verhalten benötigt.

Ich ersetzte also das Array durch eine Wrapper-Klasse. Einmal angefangen fanden sich auch andere Dinge, wie z.B. die Validierung der Attribute, die verschoben werden konnten. Letztendlich profitierte nicht nur die render-Methode, sondern die gesamte Klasse. Ein typisches Refactoring wie es sein sollte.

Erschreckend war für mich allerdings, wie lange ich benötigte, um mich zu diesem Schritt durchringen zu können. Arrays sind intuitiv und billig in der Verwendung, aber das sollte kein Grund sein, sie nicht durch Objekte zu ersetzen. Versucht es, es fühlt sich besser an 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *