1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Includen, nur wenn die Klasse benötigt wird.

Dieses Thema im Forum "PHP" wurde erstellt von crazy_chicken, 11. September 2017.

  1. crazy_chicken

    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!
     
  2. cwriter

    cwriter Erfahrenes Mitglied

    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
     
  3. abdellaui

    abdellaui Erfahrenes Mitglied

    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.
     
  4. merzi86

    merzi86 Erfahrenes Mitglied

    @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
     
    lockcat und cwriter gefällt das.
  5. cwriter

    cwriter Erfahrenes Mitglied

    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
     
Die Seite wird geladen...