Fred Furunkelstein 2012: Fatal Error abfangen

Beitrag lesen

Wozu das Auslagern gut sein kann: Es verringert den Overhead, der beim Kompilieren der Source einer Klasse besteht, insbesondere dann, wenn die Klasse sehr viele Methoden bereitstellt. Beispielsweise gäbe es in einer Klasse 'Shop' die Methode 'order', die erst dann gebraucht wird, wenn der Kunde seine Bestellung absendet. Das Laufzeitverhalten wird verbessert, wenn diese Source nicht bei jedem Klick, den der Kunde tätigt, kompiliert wird.

Das Laufzeitverhalten wird vor allem verschlechtert, wenn man solche "all in one" skripte schreibt. Und nicht nur das. Du willst erst alles in einem Skript einlagern und dann Teile davon auslagern. Das ist wie als würdest Du im Winter die Straße erst mit Wasser bespritzen (damit es glatt wird) und dann Streusalz darauf streuen (weil es glatt ist). Dann noch eine "all-in-one-Klasse" shop: Ich finde, Du übertreibst absolut maßlos.

Haben eingefleischte PHP-Programmierer dafür eine andere Lösung?

Ja. Eine index.php (zeigt den Shop an), eine bestell.php (übernimmt die Bestellung in die Session), eine warenkorb.php ... und niemals "Hier packe ich alles rein-Klassen". Das Konzept mag für monolythische Programme mit einer eigenen Oberfläche gut sein - aber bei PHP, dass dafür gemacht ist nach einem Request auch eine eng umrissene Aufgabe zu erledigen, erscheint mir das höchst unsinnig weil dann durch des Programmierers Wille zwingend aber ohne wirklichen Grund eine ganze Menge nicht benötigter Programmcode geladen wird.

Ob ein

if ($bar) {
   include 'foo.php';
}

dazu führt, dass foo.php nur bei Bedarf interpretiert wird können Dir andere erklären.

Was jetzt Dein All-in-One-Konzept betrifft: Es mag schöne Theorien dazu geben. Ich bezweifle aber, dass diese für den Einsatzzweck in einer verteilten Umgebung mit einzelnen Requests anwendbar sind und rate zu mehr Pragmatismus.

Programme sollen ja nicht nur schnell laufen, sondern auch irgend wann mal fertig werden.

fred