Includen, nur wenn die Klasse benötigt wird.

crazy_chicken

Erfahrenes Mitglied
Hallo Zusammen,

besteht es in PHP die Möglichkeit es so zu machen, dass immer nur die benötigten/genutzten Klassen geladen werden um nicht alle von vorne rein laden zu müssen?

z.b. wenn irgendwo im Code aufgerufen wird new User(), dass erst dann die entsprechende Datei user.php geladen wird?

danke!
 
besteht es in PHP die Möglichkeit es so zu machen, dass immer nur die benötigten/genutzten Klassen geladen werden um nicht alle von vorne rein laden zu müssen?

z.b. wenn irgendwo im Code aufgerufen wird new User(), dass erst dann die entsprechende Datei user.php geladen wird?
Ja, man kann die Klassen in einzelne Dateien packen und dann inkludieren. php-includes dürfen auch mitten in einer Datei stehen, allerdings macht es aus verschiedenen Gründen wenig Sinn, die Klassen so spät wie möglich zu laden.

Gruss
cwriter
 
Du kannst doch eventuell ein Factory-Muster verwenden, in der du Instanzen jeglicher Klasse erzeugen kannst.

Vorweg: https://www.philipphauer.de/study/se/design-pattern/abstract-factory.php

Eine beliebige Methode übernimmt (String) die Klassenname und via If-Abfrage werden includes ausgeführt und daraufhin Instanzen der Klasse erzeugt. Über einen beliebigen get-Methode kannst du dann die Instanz zurückliefern.

So muss du theoretisch nur noch die Factory Klasse includen.
 
@cwriter das ist nicht unbedingt richtig, da jede geladene Datei auch geparst wird, so dass es eher darum geht nur die Dateien zu laden, die auch wirklich benötigt werden.
@abdellaui ein Factory ist nicht unbedingt notwendig.

Es gibt im PHP bereits eine Autoload Function, welche automatisch getriggert wird, falls eine Unbekannte Klasse verwendet wird.
Innerhalb dieser Funktion kann man das laden der jeweiligen Klasse realisieren. Dies ist dort auf alle möglichen Arten möglich.
Entweder du definierst alle Klassen und deren Dateien oder du liest diese Dynamisch ohne festen Include.

Wie das funktioniert kann hier nachgelesen werden:
http://php.net/manual/de/language.oop5.autoload.php
 
das ist nicht unbedingt richtig, da jede geladene Datei auch geparst wird, so dass es eher darum geht nur die Dateien zu laden, die auch wirklich benötigt werden.
Das kann man allerdings auch statisch richtig machen - was (marginal) schneller ist.
Ich hatte eher im Kopf, dass das Nachladen in zeitkritische Abschnitte (z.B. DB-Zugriffe) fallen könnte, wodurch eine Resource länger als nötig gesperrt bleibt.
Dass inkludierte Dateien voll geparst werden müssen, stimmt natürlich, allerdings trifft das ja zumindest teilweise auch für delay-loaded Code zu.

Aber durch die Erwähnung des autoload-Features ist deine Antwort sicher besser als meine :)

Gruss
cwriter
 
Zurück