Różnica między require, include, require once I include once?

W PHP:

  • Kiedy należy stosować require vs. include?
  • Kiedy należy użyć require_once vs. include_once?
Author: Emil, 2010-03-10

26 answers

Istnieją również require i include_once.

Więc twoje pytanie powinno być...
  1. Kiedy należy stosować require vs. include?
  2. Kiedy należy stosować require_once vs. require

Odpowiedź na 1 jest opisana tutaj .

Funkcja require() jest identyczna jak include (), z tą różną różnicą, że obsługuje błędy. Jeśli wystąpi błąd, funkcja include() wygeneruje Ostrzeżenie, ale skrypt będzie nadal wykonywany. Require () generuje fatal błąd, a skrypt zostanie zatrzymany.

Odpowiedź na 2 można znaleźć tutaj .

Instrukcja require_once() jest identyczna jak require (), z tym że PHP sprawdzi, czy plik został już dołączony, a jeśli tak, to nie Dołącz (require) go ponownie.

 1197
Author: Leo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-03 18:23:57

Użyj

  • Require
    gdy plik jest wymagany przez Twoją aplikację, np. ważny szablon wiadomości lub plik zawierający zmienne konfiguracyjne, bez których aplikacja by się złamała.

  • Require_once
    gdy plik zawiera zawartość, która powodowałaby błąd przy późniejszym włączeniu, np. function important() { /* important code */} jest zdecydowanie potrzebne w aplikacji, ale ponieważ funkcje nie mogą być ponownie zgłoszone nie powinny być uwzględnione jeszcze raz.

  • Include gdy plik nie jest wymagany, a przepływ aplikacji powinien być kontynuowany, gdy nie został znaleziony, np.
    świetne do szablonów odwołujących się do zmiennych z bieżącego zakresu lub czegoś

  • Include_once
    opcjonalne zależności, które spowodowałyby błędy podczas późniejszego ładowania lub może zdalne włączenie pliku, którego nie chcesz powtórzyć ze względu na nagłówek HTTP

Ale zasadniczo, to od Ciebie zależy, kiedy użyć które.

 336
Author: Gordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 09:49:30

Moja sugestia to użycie require_once 99,9% czasu.

Użycie require lub include zamiast tego oznacza, że Twój kod nie może być ponownie użyty gdzie indziej, tzn. że skrypty, które ściągasz, faktyczniewykonują kod zamiast udostępniać klasę lub bibliotekę funkcji.

Jeśli wymagasz / dołączasz kod, który wykonuje się na miejscu, jest to kod proceduralny i musisz poznać nowy paradygmat. Jak programowanie obiektowe, Programowanie funkcyjne lub programowanie funkcyjne.

Jeśli już zajmujesz się programowaniem oo lub funkcyjnym, użycie include_once będzie głównie opóźnianiem gdzie w stosie znajdziesz błędy/błędy. Czy chcesz wiedzieć, że funkcja do_cool_stuff() nie jest dostępna w momencie późniejszego wywołania lub w momencie, gdy oczekujesz, że będzie dostępna, wymagając biblioteki? Ogólnie rzecz biorąc, najlepiej od razu wiedzieć, czy coś, czego potrzebujesz i oczekujesz, nie jest dostępne, więc po prostu użyj require_once.

Alternatywnie, we współczesnym OOP, po prostuautoload Twoje klasy po użyciu.

 271
Author: Kzqai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-13 03:15:57

Różnica między funkcjami _once i bez funkcji _once: bez _once kod zostanie dołączony ponownie, podczas gdy Z FUNKCJAMI _ONCE PHP śledzi Dołączone pliki i dołączy je tylko raz.

Różnica między require i include: Jeśli wymagany plik nie zostanie znaleziony, PHP wyemituje błąd krytyczny, podczas gdy dla include zostanie wyemitowane tylko Ostrzeżenie.

 26
Author: Sebastian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-10 16:18:14

include() wyświetli ostrzeżenie, jeśli nie może zawierać pliku, ale reszta skryptu zostanie uruchomiona.

require() rzuci E_COMPILE_ERROR i zatrzyma skrypt, jeśli nie może dołączyć pliku.

Funkcje include_once() i require_once() nie dołączą pliku po raz drugi, jeśli został on już dołączony.

Zobacz następującą dokumentację strony:

 25
Author: Polynomial,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-15 19:33:40

Gdy używasz require_once() może być używany w pliku do dołączania innego pliku, gdy potrzebny jest wywołany plik tylko jeden raz w bieżącym pliku. Tutaj w przykładzie mam test1.php.

<?php  
echo "today is:".date("Y-m-d");  
?>  

I w innym pliku, który nazwałem test2.php

<?php  
require_once('test1.php');  
require_once('test1.php');  
?>

Ponieważ oglądasz m wymagający pliku test1 dwa razy, ale plik będzie zawierał test1 raz i do wywołania po raz drugi zostanie to zignorowane. I bez zatrzymywania wyświetli wyjście pojedynczy czas.

Za każdym razem, gdy używasz` include_once () ' może być używane w pliku do dołączania innego pliku, gdy potrzebny jest wywołany Plik więcej niż jeden raz w bieżącym pliku. Tutaj w przykładzie mam plik o nazwie test3.php.

<?php  
echo "today is:".date("Y-m-d");  
?> 

I w innym pliku, który nazwałem test4.php

<?php  
include_once('test3.php');  
include_once('test3.php');  
?>

Podczas oglądania m wraz z plikiem test3 będzie zawierać plik po raz pierwszy, ale wstrzymać dalsze wykonanie.

 18
Author: AliMohsin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-02 17:36:55

Użyj "include" dla szablonów wielokrotnego użytku PHP . Użyj "require" dla wymaganych bibliotek.

"*_once " jest ładny, ponieważ sprawdza, czy plik jest już załadowany, czy nie, ale ma to sens tylko dla mnie w "require_once".

 16
Author: mo.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 11:26:59

Różnica polega na błędzie generowanym przez polecenia. W przypadku require plik, którego chcesz użyć, jest naprawdę wymagany i w ten sposób generuje E_ERROR, jeśli nie zostanie znaleziony.

require() jest identyczny z include(), z tym, że w przypadku awarii spowoduje to również fatalny błąd poziomu E_ERROR.

include generuje błąd E_WARNING tylko wtedy, gdy się nie powiedzie, który jest mniej lub bardziej cichy.

Więc użyj go, jeśli plik jest wymagany do działania pozostałego kodu i chcesz, aby skrypt się nie powiódł plik nie jest dostępny.


Dla *_once():

include_once() może być stosowany w przypadkach, gdy ten sam plik może być dołączony i oceniony więcej niż jeden raz podczas określonego wykonywania skryptu, więc w tym przypadku może to pomóc uniknąć problemów, takich jak redefinicje funkcji, zmiana przypisania wartości zmiennej, itp.

To samo dotyczy require_once() oczywiście.


Odniesienie: require(), include_once()

 12
Author: Felix Kling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-10 16:25:55

Z require plik musi istnieć, jeśli nie, to wyświetli się błąd; natomiast z include-jeśli plik nie istnieje, wtedy strona będzie kontynuowała Ładowanie.

 8
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-10 16:24:59

Require spowoduje błąd krytyczny (E_COMPILE_ERROR) i zatrzyma skrypt.

Include wyświetli tylko Ostrzeżenie (E_WARNING) i skrypt będzie kontynuowany.

Instrukcja require_once może być użyta do umieszczenia pliku PHP w innym Pliku, kiedy może być konieczne dołączenie wywołanego Pliku więcej niż jeden raz.

Jeśli a.php czy skrypt PHP wywołujący b.php z instrukcją require_once() i nie znajduje b.php, a.php zatrzymuje egzekucję, powodując śmierć błąd.

 8
Author: Moby M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 02:32:18

Wymagają krytycznych części, takich jak Autoryzacja i obejmują wszystkie inne.

Multiple includes są po prostu bardzo złym projektem i w ogóle należy ich unikać. * _once nie ma znaczenia.

 7
Author: Your Common Sense,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 11:25:26

Include / Require możesz dołączyć ten sam plik więcej niż raz również:

Require() jest identyczne z include (), z tym, że po niepowodzeniu spowoduje to również fatalny błąd poziomu E_COMPILE_ERROR. Innymi słowy, zatrzyma skrypt, podczas gdy include() emituje tylko Ostrzeżenie (E_WARNING), które pozwala skryptowi kontynuować.

Require_once / include_once

Jest identyczne jak include / require z tym że PHP sprawdzi jeśli plik został już dołączony, a jeśli tak, nie dołączaj (wymagaj) go ponownie.

 6
Author: Marcx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 11:48:24

Definicje klas i funkcji powinny być uporządkowane w plikach.

Użyj require_once do załadowania zależności (klas, funkcji, stałych).

Użyj require do załadowania plików podobnych do szablonów.

 6
Author: Tiberiu-Ionuț Stan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-02 09:20:26

Include ()

Zawiera określony plik. Wyświetli ostrzeżenie, jeśli nie znajdzie pliku i nie wykona pozostałych skryptów

Require ()

Zawiera określony plik. Spowoduje to błąd krytyczny, jeśli nie uda się znaleźć pliku i zatrzyma wykonanie

Include_once ()

Zawiera określony plik. plik został już dołączony, nie zostanie ponownie dołączony. Wygeneruje ostrzeżenie, jeśli nie uda mu się znaleźć pliku i wykonać Pozostałe Skrypty.

Require_once ()

Zawiera określony plik. plik został już dołączony, nie zostanie ponownie dołączony. Spowoduje to błąd krytyczny, jeśli nie uda się znaleźć pliku i zatrzyma wykonanie.

 6
Author: Er.Naved Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 10:41:59

Odpowiedź po 7 latach za rok 2018

To pytanie zostało zadane siedem lat temu i żadna z odpowiedzi nie daje praktycznej pomocy na to pytanie. W nowoczesnym programowaniu PHP używasz głównie required_once tylko raz, aby dołączyć klasę autoloader( często Autoloader composera) i ładuje wszystkie Twoje klasy i funkcje (pliki funkcji muszą być wyraźnie dodane do pliku composer.json, aby były dostępne we wszystkich innych plikach). Jeśli z jakiegoś powodu twoja klasa nie jest ładowana z autoloadera, używasz Aby go załadować.

W dzisiejszych czasach używasz require Tylko do dzielenia dużej części pliku PHP. Jest to głównie definicja Wielkiej tablicy. W takich przypadkach używa się tylko require, a nie require_once.

 <?php
// arr.php
return ['x'=>'y'];

 <?php
//main.php
$arr= require 'arry.php'

Jeśli plik, którego zamierzasz użyć, zawiera coś wykonywalnego lub deklaruje niektóre zmienne, których prawie cały czas musisz używać require, ponieważ jeśli użyjesz require_once w innym miejscu, Twój kod nie zostanie wykonany i/lub Twoje zmienne nie będą inicjowane po cichu, powodując błędy, które są absolutnie trudne do wykonania. / align = "left" /

Nie ma praktycznego zastosowania dla include i include_once naprawdę.

 5
Author: PHPst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-03 13:01:12

Z instrukcji :

require() jest identyczny z include(), z tym, że w przypadku awarii spowoduje to również fatalny błąd poziomu E_COMPILE_ERROR. Innymi słowy, zatrzyma skrypt, podczas gdy include() emituje tylko Ostrzeżenie (E_WARNING), które umożliwia kontynuowanie skryptu.

To samo dotyczy wariantów _once().

 4
Author: Ferdinand Beyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 11:46:19

include() wygeneruje ostrzeżenie, gdy nie znajdzie pliku, ale require_once() wygeneruje błąd krytyczny.

Inna sprawa, jeśli plik jest dołączany wcześniej. Wtedy require_once() nie włącza go ponownie.

 4
Author: Rukmi Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 11:28:21

Używałem funkcji jak poniżej:

function doSomething() {
    require_once(xyz.php);
    ....
}

Były stałe wartości deklarowane w xyz.php.

Muszę wywołać tę funkcję doSomething () z innego pliku skryptu PHP.

Ale zaobserwowałem zachowanie podczas wywoływania tej funkcji w pętli, ponieważ pierwsza iteracja doSomething() otrzymywała stałe wartości w xyz.php, ale później każda iteracja doSomething() nie była w stanie uzyskać stałych wartości zadeklarowanych w xyz.php.

Rozwiązałem swój problem przełączając się z require_once() na include(), zaktualizowany doSomething() kod jest jak poniżej:

function doSomething() {
    include(xyz.php);
    ....
}

Teraz każde wywołanie iteracji do doSomething() otrzymuje stałe wartości zdefiniowane w xyz.php.

 4
Author: pcj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 02:33:20

W dobie autoloaderów PSR-0 / PSR-4 może być zupełnie niepotrzebne używanie któregokolwiek z poleceń, jeśli potrzebujesz tylko udostępnić niektóre funkcje / klasy do swojego kodu (oczywiście nadal potrzebujesz autoloadera require_once w swoim pliku bootstrap i szablonach include, jeśli nadal używasz PHP jako silnika szablonów).

 3
Author: mp31415,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-25 15:39:26
  1. Użyj require function, gdy musisz załadować dowolną klasę, funkcję lub zależność.

  2. Użyj funkcji include, Gdy chcesz załadować plik w stylu szablonu

Jeśli nadal jesteś zdezorientowany, po prostu użyj require_once przez cały czas.

 2
Author: James Wong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-07 04:13:21

 

  1. Kiedy należy używać require LUB include?

    Funkcje require i include wykonują to samo zadanie, tzn. zawierają i oceniają podany plik, ale różnica polega na tym, że require spowoduje błąd krytyczny, gdy podana lokalizacja pliku jest nieprawidłowa lub dla jakiegokolwiek błędu, podczas gdy include wygeneruje Ostrzeżenie i kontynuuje wykonywanie kodu.

    Możesz więc użyć funkcji require W przypadku, gdy plik, który próbujesz dołączyć, jest sercem system i może mieć ogromny wpływ na resztę kodu i możesz użyć funkcji include, gdy plik, który próbujesz dołączyć, jest prostym plikiem zawierającym mniej ważny kod.

    I moją osobistą rekomendacją (dla mniej ważnego kodu) jest, aby przejść do funkcji require wszędzie w kodzie, gdy jest on w fazie rozwoju, tak, że można debugować kod, a później zastąpić wszystkie funkcje require przez funkcję include przed przeniesieniem jej do produkcji, tak, że jeśli pominiesz jakieś błędy nie wpłynie to na użytkownika końcowego, a reszta kodu jest wykonywana poprawnie...

  2. Kiedy należy używać require_once lub require?

    Podstawowa różnica pomiędzy require i require_once to require_once sprawdzi, czy plik jest już dołączony, czy nie, jeśli jest już dołączony, to nie będzie zawierał pliku, podczas gdy funkcja require będzie zawierać plik niezależnie od tego, czy plik jest już dołączony, czy nie.

    Więc w przypadkach, gdy chcesz dołączyć jakiś fragment kodu wielokrotnie używaj funkcji require, natomiast jeśli chcesz dodać kod tylko raz do kodu, użyj require_once.

 2
Author: Akshay Khale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 02:38:33

Są to wszystkie sposoby dołączania plików:

Require oznacza, że tego potrzebuje. Require_once oznacza, że będzie go potrzebował, ale wymaga go tylko raz. Include oznacza, że będzie zawierać plik, ale nie musi go kontynuować.

Przykłady:

Require 'filename' Require_once 'nazwa pliku' Include 'filename'

Istnieje również funkcja include_once, która zawiera plik raz.

Include_once 'nazwa pliku'

Nie używaj wielkich liter tam, gdzie mam, jak piszę z mojego telefon.

Dziękuję za poświęcony czas.

 0
Author: Joshua Charles Pickwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 08:20:47

Zasadniczo, jeśli potrzebujesz złej ścieżki, PHP wyświetli błąd krytyczny i zostanie wywołana funkcja shutdown, ale gdy dodasz złą ścieżkę, PHP będzie kontynuować wykonywanie, ale wyświetli tylko ostrzeżenie, że plik nie istnieje.

Od angielskiego słowa require , PHP mówi, że wykonanie strony lub pliku zależy od wymaganego pliku.

Z mojego doświadczenia wynika, że normą jest wymaganie ważnych plików, takich jak pliki konfiguracyjne, klasy baz danych i inne ważne narzędzia.

 0
Author: Akintunde-Rotimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 02:31:07

Niedawno zapytano mnie, jaka jest różnica między include I require w PHP. Pozornie funkcjonują tak samo, ale jest znacząca różnica.

Po pierwsze, ani include, ani require nie są funkcjami, są konstrukcjami. Dlatego nie jest konieczne wywoływanie ich za pomocą nawiasów, takich jak include ('file.php'); zamiast tego zaleca się użycie include ' file.php".

Różnica między include I require pojawia się, gdy nie można znaleźć dołączonego pliku: include wyświetli ostrzeżenie (E_WARNING) i skrypt będzie kontynuowany, podczas gdy require wyświetli błąd krytyczny (E_COMPILE_ERROR) i zatrzyma skrypt. Jeśli dołączany plik jest krytyczny dla reszty skryptu działającego poprawnie, musisz użyć require.

Powinieneś wykryć błędy krytyczne rzucane przez require podczas procesu tworzenia i być w stanie je rozwiązać przed wydaniem skryptu do dziczy; jednak możesz rozważyć użycie include, aby wprowadzić plan B jeśli nie jest tak prosto-do przodu: -

<?php
if (@include 'file.php') {
    // Plan A
} else {
    // Plan B - for when 'file.php' cannot be included
}

W tym przykładzie include jest używany do przechwytywania pliku'.php', ale jeśli to się nie powiedzie, wpisujemy Ostrzeżenie używając @ i wykonujemy jakiś alternatywny kod. include zwróci false, jeśli nie można znaleźć pliku.

Include_once i require_once zachowują się jak include I require, z tym wyjątkiem, że dołączą plik tylko wtedy, gdy nie został jeszcze dołączony. W przeciwnym razie popełniają te same błędy.

 0
Author: Ajeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 05:40:09

require ma większy narzut niż include, ponieważ najpierw musi przetworzyć plik. Zastąpienie requires przez {[3] } jest często dobrą techniką optymalizacji.

 -1
Author: Bink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 02:41:55

Wystarczy użyć require i include.

Ponieważ pomyśl jak pracować z include_once lub require_once. To jest szukanie danych dziennika, które zapisują dołączone lub wymagane pliki PHP. Jest to więc wolniejsze niż include I require.

if (!defined(php)) {
    include 'php';
    define(php, 1);
}

Po prostu używam w ten sposób...

 -2
Author: Ruke GiPyeong Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 02:35:29