Czy jest między nimi jakaś różnica? Czy ich używanie jest kwestią preferencji? Czy używanie jednego nad drugim daje jakieś korzyści? Co jest lepsze z punktu widzenia bezpieczeństwa?
Czy jest między nimi jakaś różnica? Czy ich używanie jest kwestią preferencji? Czy używanie jednego nad drugim daje jakieś korzyści? Co jest lepsze z punktu widzenia bezpieczeństwa?
Odpowiedzi:
Różnice wyjaśniono w szczegółowym podręczniku PHP na stronierequire
:
require
jest identyczny zinclude
wyjątkiem sytuacji, gdy wystąpi błąd, spowoduje również krytycznyE_COMPILE_ERROR
błąd poziomu. Innymi słowy, zatrzyma skrypt, podczas gdy include emituje tylko ostrzeżenie (E_WARNING
), które pozwala skryptu kontynuować.
Zobacz @ odpowiedź efritz jest na przykład
<?php if (isset($flibbertygibbet)) require 'file.php';
wydaje się, że ta odpowiedź wygląda na całkowicie niepoprawną. W przeciwnym razie powinienem otrzymać błąd krytyczny, nawet jeśli warunek nie jest prawdziwy. strace
nie pokazuje PHP nawet próbującego dotknąć file.php
.
if (false) require 'file.php';
że spowoduje załadowanie (ale nie wykonanie) pliku „file.php”. TLDR ignoruje wszystkie te komentarze.
require
zgłosi błąd krytyczny PHP, jeśli nie można załadować pliku. (Wykonanie zatrzymane)
include
generuje Ostrzeżenie, jeśli nie można załadować pliku. (Egzekucja trwa)
Oto ładna ilustracja uwzględniająca i wymagająca różnicy :
Od: Różnica wymaga a zawiera php (autor: Robert; listopad 2012)
Użyj, include
jeśli nie masz nic przeciwko kontynuowaniu skryptu bez ładowania pliku (jeśli nie istnieje itp.) I możesz (chociaż nie powinieneś) żyć z wyświetlanym komunikatem o błędzie ostrzegawczym.
Użycie require
oznacza, że skrypt zatrzyma się, jeśli nie może załadować określonego pliku, i zgłosi błąd krytyczny.
Jak wskazywali inni, jedyną różnicą jest to, że wymaga rzucania krytycznego błędu, a dołącza - dające się złapać ostrzeżenie. Jeśli chodzi o to, którego użyć, radzę trzymać się tego. Czemu? ponieważ możesz złapać ostrzeżenie i przekazać znaczącą opinię użytkownikom końcowym. Rozważać
// Example 1.
// users see a standard php error message or a blank screen
// depending on your display_errors setting
require 'not_there';
// Example 2.
// users see a meaningful error message
try {
include 'not_there';
} catch(Exception $e) {
echo "something strange happened!";
}
Uwaga: na przykład 2, aby działać, musisz zainstalować program obsługi błędów do wyjątków, jak opisano tutaj http://www.php.net/manual/en/class.errorexception.php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>
Bardzo prosty Praktyczny przykład z kodem. Zostanie wyświetlone pierwsze echo. Bez względu na to, czy używasz include lub require, ponieważ jest uruchamiany przed dołączeniem lub wymaganiem.
Aby sprawdzić wynik, w drugiej linii kodu celowo podaj złą ścieżkę do pliku lub popełnij błąd w nazwie pliku. Zatem drugie echo, które ma zostać wyświetlone, będzie całkowicie zależne od tego, czy używasz wymagania, czy dołączenia .
Jeśli używasz wymagania, drugie echo nie zostanie wykonane, ale jeśli użyjesz dołączania, niezależnie od rodzaju błędu, zobaczysz również wynik drugiego echa.
W przypadku dołączenia program nie zakończy działania i nie wyświetli ostrzeżenia w przeglądarce, z drugiej strony, program Require zakończy działanie i wyświetli błąd krytyczny w przypadku nieznalezienia pliku.