Moin!
PHP pappt alles, was du mit include(), require() & Co. einbindest, stumpfsinnig zu einer großen Textdatei zusammen.
Das ist falsch. Du suggerierst, dass beim Parsen zuerst mal alle includes/requires gefunden und damit ein großer Quelltext zusammengebaut wird, den PHP dann ausführt.
Include oder Require setzen die Codeausführung in der angegebenen Datei fort, und auch nur, wenn sie selbst ausgeführt werden. Das beinhaltet zu Beginn das Parsen des neu erwähnten Quellcodes bzw. das Auslesen der Opcodes für diese Datei aus dem Cache. Der Code hat dann zwei mögliche Effekte: Entweder definiert er globale Symbole (Funktionen-, Klassen- oder Konstantendefinitionen), oder er ändert etwas am globalen Zustand des laufenden Requests (alles, was keine Funktionen, Klassen oder Konstanten definiert, sondern "ausführt").
Man kann wie bei gewöhnlichen Funktionen auch Rückgabewerte haben - das ist toll für Konfigurationsdaten:
# a.php
$result = include('b.php');
var_dump($result)
# b.php
return ['foo'=>'bar'];
# Ausgabe
array(1) {
["foo"]=>
string(3) "bar"
}
Du musst lediglich darauf achten, dass eine Funktion wie session_start() in diesem Textklumpen "ganz oben" aufgerufen wird.
Vor der ersten Ausgabe von Inhalt an den Ausgabekanal, also den Browser, reicht.
Wenn man sich an Konventionen hält, dann tut man in Include-Dateien entweder nur Definitionen von globalen Symbolen rein (die kann man einbinden, ohne dass irgendeine Textausgabe passiert), oder alternativ "Nebenwirkungen", aber nie beides gleichzeitig. Das erleichtert auch das Autoloading.
Grüße Sven