include oder require?

Was soll der PHP-Entwickler benutzen, include oder require bzw. include_once oder require_once?
Und wo liegt da eigentlich der Unterschied?

Die Frage kommt oft, deshalb an dieser Stelle mal ganz klipp und klar und kurz:

require bzw. require_once benutzen, denn: Sowohl include wie auch require binden eine Datei ein, aber, sollte ein Fehler in der includierten Dateie sein, so bricht require mit einem E_COMPILE_ERROR ab, während include fröhlich mit einer WARNING weitermacht.

Im Sinne der Vermeidung von code-smells fällt eure Wahl also auf require bzw. require_once.

5 Gedanken zu „include oder require?

  1. Anonymous

    Außer es wurde vorher schon überprüft, ob es die Datei überhaupt gibt (zB. in einem Autoloader) …
    Dann include ….

    Antworten
  2. floeH

    Es gibt noch einen anderen sehr wichtigen Unterschied: Bei einem „include“ oder „include_once“ wird die Datei nicht nur geladen, sondern auch ausgeführt. Während bei einem „require“ oder „require_once“ die Inhalte tatsächlich „nur“ geladen werden.

    Antworten
  3. Sascha Presnac

    @Anonym: Nun, in dem Fall benutzt du require ja explizit, indem du die Prüfung und die entsprechende Fehlerbehandlung nur selbst übernimmst. Das require trotzdem zu lassen wäre aber weiterhin sinnvoll und auf jeden Fall nicht falsch.

    @floeH: Dieses Gerücht hält sich echt hartnäckig, evtl. war es ja auch mal so. Fakt ist: Das stimmt nicht, ob ich Code per require oder per include einbinden, beide male wird der Code auch ausgeführt. Der wirklich einzige Unterschied liegt in der Fehlerbehandlung!

    Antworten
  4. Philip H.

    Ich würde es nicht pauschal so sagen. require und include (bzw. ihre _once-Pendante) haben ihre Daseinsberechtigung. Sie sind genau für den Fall gemacht für den sie einstehen. Will ich eine Datei inkludieren (z.B. eine Klasse), weil ich damit weiterarbeiten muss, ist diese Datei ein Muss und daher per require einzubinden. In der Regel mit require_once, weil ich Klassendeklarationen nur einmal laden will (und kann).

    Es gibt aber durchaus Fälle, in denen ich eine Datei zwar einbinden will, aber diese nicht zwangsläufig vorhanden sein muss. Vor allem beim Batch-Processing oder aber wenn man Listener schreibt ist dies teilweise nötig.

    Und auch die Nutzung der _once-Varianten sollte gut überlegt sein. Jede dieser 4 Funktionen hat einen bestimmten Zweck, den es jedes mal neu zu überlegen gilt, um dann die richtige Funktion zu nutzen.

    Aber ich stimme mit Dir überein,, indem ich mal behaupte, dass require_once in der Regel die richtige Funktion ist und die anderen 3 einen besonderen Grund für die Verwendung benötigen.

    Antworten
  5. floeH

    @Sascha: Oh, danke für den Hinweis. Hab es auch gleich selbst ausprobiert, da ich es nicht glauben konnte. Tatsache! 🙂

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.