Pdf.php wird Zend/Memory.php geladen, obwohl nicht unbedingt benötigt.
z.B. in der loader.php kommt 10mal (ohne gezählt zu haben) require_once 'Zend/Exception.php'; vor. Das ist mindestens redundant aber sicherlich unschön.
Das findet sich vergleichbar an 1000 Ecken in der Klassensammlung so.
Das findet sich vergleichbar an 1000 Ecken in der Klassensammlung so.
Man sollte in diesem Zusammenhang auch erwähnen, dass die Klasse Exception sowie alle (?) ihre Derivate leer sind. Man könnte also auch komplett auf das require verzichten und einfache, PHP-built-in Exceptions werfen. Den ganzen Zauber macht das Framework nur, damit wir Programmierer gezielt Exception-Klassen überschreiben können. Wenn man das tatsächlich macht, entstehen manchmal sehr umfangreiche Klassen, die wiederum weitere für Logging, Mailing, Recovering laden. Diesen Rattenschwanz will man wirklich nur geladen haben, wenn er gebraucht wird.
Aber in public function setDate($date = null) wird KEIN require vor der dem throw gesetzt. Warum wird da abgewichen und damit der Autoload genutzt?
Auch findet sich in Mail.php ein doppeltes require_once 'Zend/Mail/Transport/Abstract.php';
In Memory.php wird dann die Exception in der require Kaskade geladen. Also wieder ein Abweichen vom Prinzip.
Es arbeiten eben sehr viele an diesem Code mit und nicht alle sind gleichermaßen gründlich oder mit den Konventionen geimpft. Imho verlassen sich die Zend Entwickler da zu sehr auf ihre Unit Tests und den prüfenden Blick der Anwender. Aber zeige mir ein Framework ähnlicher Größe, das durchweg 1a programmiert ist!
Und dieses sieht aus wie im Kindergarten: (factory Methode)
PHP-Code:
require_once str_replace('_', DIRECTORY_SEPARATOR, $backendClass) . '.php';
Weg 1: in einer require Kaskade alle evtl. benötigten Klassen laden
Weg 2: Ein require an dem Punkt, wo die Klasse benötigt wird
Weg 3: es dem autolader überlassen, den Kram ranzuschaffen
Weg 2: Ein require an dem Punkt, wo die Klasse benötigt wird
Weg 3: es dem autolader überlassen, den Kram ranzuschaffen
Das leite ich mir so aus dem Code ab. Du hast zwar Abweichungen gezeigt, aber im Großen und Ganzen ist es doch sehr einheitlich. Entweder steht es irgendwo geschrieben oder es ist der common sense der Entwickler. Jedenfalls ist es zu einheitlich, um als Zufall zu gelten.
Weg 3 schließt sich übrigens aus. ZF benutzt den eigenen Autoloader nicht. Das hat u.a. den Vorteil, dass es dem Anwender überlassen bleibt, wie er seine Klassen lädt.
In der absoluten Aussage, ist es schlicht falsch!
Was wäre denn hier absolute Aussage? require_once ist require_once, aber was ist ein Autoloader? Vom einfachen
PHP-Code:
function __autoload($name) {
require_once('classes/'.$name.'.php');
}
Und selbst wenn man sich auf einen Autoloader verständigen würde, wären die Performanceunterschiede von der Applikation abhängig. Wenn jedes require_once wirklich eine Datei lädt, kann Autoloading gar nicht schneller sein. Wenn zig mal das gleiche required wird, ist Autoloading besser.
Mit Kloppen hat das wirklich nichts zu tun. Es wird eben mal über etwas diskutiert, was mehr Tiefgang hat als die meisten Anfängerfragen. Trotzdem ist es eine normale Diskussion und kein Streit. Hier gibt es nichts zu gaffen. Es darf mitdiskutiert werden.
Kommentar