2 Stimmen

Liest PHP require, require_once oder include automatisch die Datei beim Laden der Seite?

Ich habe mehrere Seiten, die die include- oder require-Sprachkonstrukte in PHP verwenden. Viele davon liegen innerhalb von IF, ELSE-Anweisungen.

Mir ist klar, dass eine Seite überhaupt nicht geladen wird, wenn eine erforderliche Datei fehlt, aber der Hauptzweck der Einbindung auf diese Weise ist es,:

1) Reduzierung des Code-Wirrwarrs auf der Seite

2) die Datei nur dann laden, wenn eine Bedingung erfüllt ist.

Lädt das Ausgeben einer include- oder require-Anweisung die Datei trotzdem (und eliminiert damit die Vorteile, die ich durch das Platzieren innerhalb der if/else-Anweisung zu erreichen versuchte)?

Kurzes Beispiel:

<?php

$i = 1

if($i ==1) {

      require_once('somefile.php');

} else {

     require_once('otherfile.php');
}

?>

Werden beim Laden der Seite beide Dateien geprüft UND geladen?

9voto

Pascal MARTIN Punkte 384469

Wenn Sie eine include / require Anweisung im Körper einer if (oder else ) wird sie ausgeführt, wenn die if Bedingung wahr ist.

if ($a == 10) {
    // your_first_file.php will only be loaded if $a == 10
    require 'your_first_file.php';
} else {
    // your_second_file.php will only be loaded if $a != 10
    require 'your_second_file.php';
}

Und wenn Sie wollen, können Sie das ganz einfach testen.
Dieses erste Beispiel :

if (true) {
    require 'file_that_doesnt_exist';
}

werden Sie bekommen:

Warning: require(file_that_doesnt_exist) [function.require]: failed to open stream: No such file or directory
Fatal error: require() [function.require]: Failed opening required 'file_that_doesnt_exist'

d.h. die require wird ausgeführt - und schlägt fehl, da die Datei nicht existiert.

Während dieses zweite Beispiel :

if (false) {
    require 'file_that_doesnt_exist';
}

Sie erhalten keine Fehlermeldung: die require wird nicht ausgeführt.

0 Stimmen

Hahahaha! Pascal Martin ist wieder am Werk - wie immer mit exzellentem und detailliertem Input :) +1 für das Zeigen, wie man es testet

4voto

Pekka Punkte 429407

Werden beim Laden der Seite beide Dateien geprüft UND geladen?

Nein, zumindest nicht seit (IIRC) PHP 4.0.1.

Wenn Sie das Durcheinander von Includes reduzieren wollen und hauptsächlich mit objektorientiertem Code arbeiten, sollten Sie sich auch die PHP-Funktion Autoladung .

0 Stimmen

Danke! Ich wollte nur keine unnötigen Ressourcen verschwenden und habe mich immer gefragt

0 Stimmen

Es gibt einige gute Gründe, die gegen Autoloading sprechen - die meisten beziehen sich auf Bytecode-Caches.

2 Stimmen

@ThiefMaster: Ich kann Ihre Argumentation nicht nachvollziehen (nun, es gibt keine). Ich verwende APC mit aktiviertem Opcode-Cache, und meine Anwendungen machen in der Regel regen Gebrauch von Autoloading, aber ich hatte noch nie Probleme damit. Was mache ich falsch? Was sollte ich tun, um Probleme zu bekommen?

2voto

dialer Punkte 3713

Nein, es würde nur eine dieser Dateien geladen werden.

2voto

mario Punkte 141130

El include y require Konstrukte werden nur ausgewertet, wenn sie übergeben werden. Die Dateien werden nur gelesen, wenn Ihr Ausdruck erfüllt ist.

Es ist einfach zu erklären, wenn man bedenkt, dass die Konstrukte Variablen enthalten können:

require_once("otherfile-{$i}.php");

Das wird unterstützt. Aber es kann unmöglich funktionieren, bevor PHP über diese bestimmte Zeile läuft, weil es den Zustand von $i um die richtige Datei zu laden.

0 Stimmen

Hoffentlich kopiert jemand Ihr Skript und ersetzt die {$i} con un {$_GET['i']} :D (Ja, ich bin böse, hehehe)

0 Stimmen

Ihre Ratschläge werden Ihnen ein unangenehmes Leben nach dem Tod bescheren.

0 Stimmen

Ach, wer weiß. Wahrscheinlich müssen Sie nur sagen ' OR 1 -- kurz bevor sie dich in die Hölle schicken und du auf magische Weise im Paradies landest ;) +1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X