am 20. Februar 2009
Seit kurzer Zeit verwenden wir das Zend Framework als Komponentenbibliothek. Und ich muss sagen, ich mag es wirklich. Die meisten Dinge sind gut durchdacht und greifen wunderbar ineinander. Heute war die Zend_Log Klasse dran ihren Einsatz zu finden. Besonders gelungen finde ich hier den Ansatz, dass man Filter und Writer getrennt hat. Separation of Concerns strikt durchgezogen. Bei einem Filter ist mir aber was komisches aufgefallen, denn hier werden Prioritäten meiner Meinung nach sehr “komisch” verglichen.
Es handelt sich um die Zend_Log_Filter_Priority Klasse, die ihren Vergleich wie folgt macht:
public function accept($event)
{
return version_compare($event['priority'], $this->_priority, $this->_operator);
}
Was ich daran ganz lustig finde, ist, dass der Vergleich mit version_compare gemacht wird. Diese Funktion wird eigentlich dazu verwendet zwei PHP Versionen zu Vergleichen (musste ich heute auch nachlesen). Das bedeutet, dass ich also eine Priorität “1.0 RC 1″ definieren kann und trotzdem der Vergleich mit anderen Prios klappt. Super! Super unnötig aber leider nur. Ich denke, dass diese Methode gewählt wurde, da man als Parameter den Vergleichsoperator mitgeben kann. Ansonsten müsste ich ja mit eval oder eine sehr lange switch Anweisung hätte.
Eigentlich ja eine nette Idee, trotzdem nicht so performant denke ich. Den String, den ich da vergleichen will, muss ich ja erst normieren und auseinander nehmen. Aber naja, wenn es trotzdem noch schnell genug ist, warum nicht.