include() vs require()
Willi
- php
0 Sönke Tesch0 Harry
0 Thomas Schmieder
Hello allerseits!
Was ist den nun wirklich der unterschied zwischen include() und require(). Im Buch und im Netz hab ich die Erklärung gefunden, dass require() den eingebunden code so einbindet als ob er wirklich an stelle von dem require wäre. Womit unterscheidet sich das aber von include()?
LG
Willi
Was ist den nun wirklich der unterschied zwischen include() und require(). Im Buch und im Netz hab ich die Erklärung gefunden, dass require() den eingebunden code so einbindet als ob er wirklich an stelle von dem require wäre. Womit unterscheidet sich das aber von include()?
Da hast Du ein schlechtes Buch bzw. Netz erwischt.
"Anders als include() wird require() immer die angegebene Datei
einlesen, auch dann, wenn die Programmzeile, in der sie steht, nicht
ausgeführt wird. Wenn Sie eine Datei nur bedingt einlesen wollen,
benutzen Sie include(). Die bedingte Anweisung würde require() nicht
davon abhalten, die Datei zu laden."
http://www.php.net/manual/de/function.require.php
"include() unterscheidet sich von require() dadurch, dass die
include-Anweisung jedesmal neu ausgewertet wird, sobald sie auftritt
(und nur zur Ausführungszeit). Dagegen wird die require()-Anweisung
beim ersten Auftreten mit der angegebenen Datei ersetzt, egal ob sie
einzubinden ist oder nicht (innerhalb von bedingten Anweisungen, z.B.
bei if auch dann, wenn das ausgewertete Argument FALSE ergeben hat)."
http://www.php.net/manual/de/function.include.php
So steht's in der PHP-Anleitung. include() "reagiert" also auf if- oder while-Blöcke wie jede andere Anweisung in so einem Block, d. h. include wird nur bei der jeweiligen Bedinung ausgeführt.
require() hingegen wird _immer_ ausgeführt.
Gruß,
soenk.e
Morgen
Da hast Du ein schlechtes Buch bzw. Netz erwischt.
Und Du hast eine schlechte Doku erwischt ;)
Mal im Ernst:
Die englische Variante der PHP-Doku ist immer wesentlich aktueller als die deutsche. Deswegen sollte man wann immer möglich der englischen Variante den Vorzug geben.
"Anders als include() wird require() immer die angegebene Datei
einlesen, auch dann, wenn die Programmzeile, in der sie steht, nicht
[...]
In der englischen Variante ist dieser Absatz um einen wichtigen Zusatz erweitert:
"Note: _Prior_to_PHP_4.0.2_, the following applies: require() will always attempt to read the target file, even if the line it's on never executes. The conditional statement won't affect require(). [...]"
Somit gilt ab PHP 4.0.2 für den eigentlich Unterschied zwischen include und require:
"require() and include() are identical in every way except how they handle failure. include() produces a Warning while require() results in a Fatal Error. In other words, don't hesitate to use require() if you want a missing file to halt processing of the page. include() does not behave this way, the script will continue regardless."
Soll heißen: Wird die Datei hinter include() nicht gefunden, macht das Script halt weiter. Das kann u.U. recht böse sein. Bei require() gibt's einen dicken Fehler und das Script hält an.
So steht's in der PHP-Anleitung. include() "reagiert" also auf if- oder while-Blöcke wie jede andere Anweisung in so einem Block, d. h. include wird nur bei der jeweiligen Bedinung ausgeführt.
require() hingegen wird _immer_ ausgeführt.
Wie gesgt ... bis PHP 4.0.2.
Ciao,
Harry
Da hast Du ein schlechtes Buch bzw. Netz erwischt.
Und Du hast eine schlechte Doku erwischt ;)
Mal im Ernst:
Die englische Variante der PHP-Doku ist immer wesentlich aktueller als die deutsche. Deswegen sollte man wann immer möglich der englischen Variante den Vorzug geben.
Ich verweise hier nach Möglichkeit immer auf die deutsche Version, weil sich mir mittlerweile doch der Eindruck aufgedrängt hat, daß so manch einer mit einer englischen Anleitung Probleme hat - oder mit dem Stöbern in Anleitungen allgemein, und da muß man ja die Einstiegslatte nicht gleich so hoch legen :>
Aber im Grunde hast Du natürlich Recht.
Gruß,
soenk.e
Hallo Willi,
ich habe den begründeten Verdacht, dass Du ins Suchfeld hier im Forum noch nicht die Begriffe: include require RETURN
eingetippt hast.
http://forum.de.selfhtml.org/archiv/2002/9/23360/#m129481
Sonst wäre Dir als erstes dieser Thread entgegegen gepurzelt...
Gruß
Tom