dedlfix: Frage zur "include_once" Anweisung

Beitrag lesen

echo $begrüßung;

Dann bezieht sich das ganze also nur auf diese eine Datei.

Das "once" bezieht sich auf die Date, die hinter dem include_once angegeben ist.

Benötige ich dann include_once nur, wenn in einer php-Datei mehrere includes vorhanden sind und ich vermeiden will, dass die über inclue_once includierte Datei zwei mal in dieser einen php-Datei includiert wird?

Immer dann, wenn du nicht ausdrücklich willst, dass der Inhalt einer Datei zweimal eingebunden wird solltest du include_once nehmen. Besonders dann ist es zu empfahlen, wenn die Projekte größer und unübersichtlicher werden und man Funktionalität auslagert, damit man sie an mehreren Stellen verwenden kann.

Beispiel:
Gegeben seien

  • die Scripte x.php und y.php, zwei Dateien, die aufrufbare Seiten darstellen.
  • eine Datei common.php, die allgemeinen "Kram" enthält, beispielsweise eine Funktion namens foo()
  • eine Datei db.php, in der Datenbankzugriffsfunktionalität enthalten ist. Dazu wird u.a. foo() benötigt .

x.php benötigt foo() und die Datenbanksachen:
  include 'common.php';
  include 'db.php';

y.php benötigt nur die Datenbanksachen:
  include 'db.php';

Beim Aufruf von y.php steht db.php dumm da, weil es foo() vermisst. Wenn man nun include 'common.php'; zu db.php hinzufügt, beschwert sich x.php, weil foo() zweimal deklariert werden soll.

Mit include_once passiert das nicht. x.php lädt common.php und db.php. Beim Parsen von db.php trifft es wieder auf common.php, erkennt dies und ignoriert diesen zweiten Aufruf.

Man könnte nun auf die Idee kommen, alle include-Aufrufe in die Hauptdateien zu verlagern, also den common.php-Aufruf auch in y.php einzutragen. Das hat aber mehrere Nachteile. Ein Außenstehender sieht den Grund nicht, da keinerlei Funktionalität von common.php in y.php verwendet wird. Wenn man db.php später mal um strings.php erweitern will, muss man x.php und y.php und vermutlich auch noch a.php bis z.php durchgehen und überall strings.php nachtragen, statt einmal include_once in db.php einzutragen.

Also müsste ich dann bei der erstmaligen Auswahl der Sprache diese in die Session schreiben, in jeder php-Datei prüfen ob der User inzwischen eine neue Sprache ausgewählt hat,
  - wenn ja muss ich den Session Wert für die Sprache aktualisieren und die neue Sprachdatei includieren,
  - wenn nein hole ich die Sprache aus der Session und includiere die zugehörige Sprachdatei .

Ist das richtig?

Man kann auch zuerst die Sprachauswahl prüfen, in der Session ablegen oder von dort holen und das Includen der Sprachdatei erst in einem zweiten Schritt durchführen. Damit hast du nur noch eine Include-Anweisung anstatt mehrerer verteilter. Den Dateinamen kann man mittels Stringfunktionen zusammensetzen:
$languageFile = 'language_' . $lang . '.php';
if (file_exists($languageFile))
  include_once $languageFile;
else
  // Rumnörgeln wegen Fehler

Sorry, das sind wahrscheinlich Anfängerfragen, aber ich bin auf dem Gebiet auch noch Anfänger.

Noch ne Frage nebenbei:
Wie findest Du den Vorschlag von Jeena Paradies bezüglich den Sprachdateien?

Wenn er schlecht gewesen wäre hätte ihn sicher schon jemand kritisiert. :-)

Was ist performanter? Die Textbausteine in einem Array zu halten oder für jeden Textbaustein eine eigene Variable deklarieren?

Statt vieler Einzel-Variablen, über die man die Übersicht verlieren kann, womit man sich Folgeprobleme wegen doppelter Variablennamensvergabe einhandeln kann, ist eine Ansammlung in einer Variable (Array) übersichtlicher.

Performance sollte man messen und danach über Veränderungen nachdenken. Darüber zu philosophieren ohne den Rest des Scripts zu kennen ist meist müßig.

echo "$verabschiedung $name";