pl: Lacy Load und eine Factory

Beitrag lesen

Das ist nicht der Weg, der PHP-üblich ist.

So!? Das bestimmt Du wohl oder was!?

Man kann das zwar erreichen, aber dazu braucht man die Extension runkit, die nicht zum Lieferumfang gehört.

Selbstverständlich gehört die Funktion __call() zum Lieferumfang! Informiere dich gefälligst!

Vermutlich ist der Aufwand, die entsprechende Datei zu suchen und zu laden und die Methode einzubinden größer, als den Code gleich mit zu compilieren.

Völliger Blödsinn Deine Vermutung! Wie ich schrieb, wird der include Path gesetzt und warum sollte ein Haufen Code ständig compiliert werden wenn er gar nicht gebaucht wird!?

Zudem, wenn man auf die Idee kommt, Methoden optional nachladbar zu machen, sollte man sich eher fragen, ob das überhaupt eine Methode der Klasse sein muss oder...

Auch Quatsch. Eine Klasse allein bewegt nämlich gar nichts. Auf die Methode kommt es an. Und selbstverständlich sind ausgelagerte Methoden keine Klassenmethoden sondern Instanzmethoden, ist dir der Unterschied eigentlich klar?

Das geht vielleicht mit Perl. Thema ist aber PHP. Der Kompilierprozess ist nicht beeinflussbar. Mittlerweile gibt es auch einen eingebauten OpCode-Cache, der die Notwendigkeit des erneuten Kompilieres bei jedem Script-Aufruf überflüssig macht. Aber auch für den gibt es keine Möglichkeit, ihn zu Fuß zu steuern, der arbeitet ganz von allein im Hintergrund.

Selbstverständlich kann man das auch in PHP so steuern, daß eine Lazy-Load-Methode jedesmal neu compiliert wird oder nur einmal beim ersten Aufruf. Also man kann in PHP den Codecache nutzen oder nicht.

Im Übrigen: Auch in Perl gibt es die Möglichkeit, Klassen automatisch zu laden. Es ist nur so, dass sich das in der Breite nicht durchgesetzt hat weil es unsinnig ist und die Lesbarkeit von Code verschleiert. Deswegen schrieb ich ja eingangs, daß es interessanter ist, weil effizienter, anstelle von Klassen eben Methoden nachzuladen. "Code durch Teilen effizienter machen" geht sogar in Richtung Unit-Tests, es ist nämlich so, dass ausgelagerte Methoden zwar Instanzmethoden sind, aber sie sind nicht an eine fest vorgegebene Klasse gebunden (es sei denn man manifestiert das). Damit sind solche Methoden über eine Attrappe aufrufbar (Mock) und dass man damit Redundanzen vermeiden kann schrieb ich ja auch.

Und ja, natürlich können solche Methoden auch selbst weitere Module und Code einbinden. Vielleicht hast Du ja mal was von einer Factory gehört.

Schönen Tach noch!