W PHP:
- Kiedy należy używać
require
Vs.include
? - Kiedy należy używać
require_once
Vs.include_once
?
php
include
require
require-once
Scott B.
źródło
źródło
Odpowiedzi:
Są
require
iinclude_once
również.Więc twoje pytanie powinno być ...
require
Vs.include
?require_once
vs.require
Odpowiedź na 1 została opisana tutaj .
Odpowiedź na 2 można znaleźć tutaj .
źródło
require_once()
będzie to szybsze z nichPosługiwać się
wymagają,
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ę zepsuła.
wymagany_zadany,
gdy plik zawiera treść, która spowodowałaby błąd przy kolejnym dołączeniu, np.
function important() { /* important code */}
jest zdecydowanie potrzebny w Twojej aplikacji, ale ponieważ nie można ponownie zadeklarować funkcji, nie należy go ponownie włączać.dołącz, gdy plik nie jest wymagany, a przepływ aplikacji powinien być kontynuowany, gdy nie zostanie znaleziony, np.
doskonały 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 przy kolejnym ładowaniu lub może zdalne dołączenie pliku, którego nie chciałbyś powtórzyć dwa razy z powodu narzutu HTTP
Ale w zasadzie od Ciebie zależy, kiedy go użyć.
źródło
include
?include_once
?require
?require_once
?Moja sugestia to wykorzystanie
require_once
99,9% czasu.Użycie
require
lubinclude
zamiast tego oznacza, że kodu nie można użyć w innym miejscu, tzn. Że pobierane skrypty faktycznie wykonują kod zamiast udostępniać klasę lub niektóre biblioteki funkcji.Jeśli potrzebujesz / włączasz kod, który jest wykonywany na miejscu, jest to kod proceduralny i musisz poznać nowy paradygmat . Podobnie jak programowanie obiektowe, programowanie funkcyjne lub programowanie funkcjonalne.
Jeśli już zajmujesz się programowaniem OO lub programowaniem funkcjonalnym, używanie
include_once
będzie głównie opóźniało to, gdzie na stosie znajdziesz błędy / błędy. Czy chcesz wiedzieć, że funkcjado_cool_stuff()
nie jest dostępna, kiedy zadzwonisz po nią później lub w momencie, gdy spodziewasz się, że będzie ona dostępna , wymagając biblioteki? Zasadniczo najlepiej jest natychmiast wiedzieć, czy coś, czego potrzebujesz i czego oczekujesz, nie jest dostępne, więc po prostu użyjrequire_once
.Alternatywnie, we współczesnym OOP, po prostu automatycznie załaduj swoje klasy po użyciu.
źródło
include
rodzina jest zwykle złym pomysłem (ponieważ bardzo rzadko dołącza się pliki, które mają jakiekolwiek możliwości nieistnienia), i poza tym,require_once
irequire
powinieneś używać,require_once
gdy dołączasz pliki, które definiują funkcje lub klasy, które mają być używane w innym miejscu lub tworzenie pojedynczych elementów, takich jak obiekty połączenia z bazą danych, i używanierequire
do dołączania plików, które natychmiast robią rzeczy, gdy zostaną uwzględnione. W każdej dużej aplikacji internetowej ten drugi rodzaj dołączania jest niezwykły.require_once
najprawdopodobniej kandydat będzie używany prawie przez cały czas. Biorąc pod uwagę niewielkie różnice ogólne między opcjami,require
zapewnia zatrzymanie skryptu, nie mogę myśleć o wielu scenariuszach, w których aplikacja może przetrwać bez dołączenia pliku. I_once
chroni przed problemami z duplikatem. Każdy, kto się nie zgadza, prawdopodobnie wie, co robi, może wybrać dowolną, która odpowiada aplikacji lub scenariuszowi.Różnica między funkcjami _once i bez funkcji _once: bez kodu _once zostanie ponownie dołączony, natomiast w przypadku funkcji _once PHP śledzi dołączone pliki i uwzględni je tylko raz.
Różnica między wymaganiem a włączeniem: jeśli nie zostanie znaleziony wymagany plik, PHP wygeneruje błąd krytyczny, podczas gdy w przypadku dołączenia zostanie wyświetlone tylko ostrzeżenie.
źródło
include()
wyśle ostrzeżenie, jeśli nie może dołączyć pliku, ale reszta skryptu zostanie uruchomiona.require()
wyrzuciE_COMPILE_ERROR
i zatrzyma skrypt, jeśli nie może dołączyć pliku.Funkcje
include_once()
irequire_once()
nie dołączą pliku po raz drugi, jeśli został już dołączony.Zobacz następujące strony dokumentacji:
źródło
Ilekroć używasz,
require_once()
możesz użyć w pliku, aby dołączyć inny plik, gdy potrzebujesz wywoływanego pliku tylko jeden raz w bieżącym pliku. Tutaj w przykładzie mam test1.php.oraz w innym pliku o nazwie test2.php
gdy oglądasz m wymagający pliku test1 dwa razy, ale plik będzie zawierał test1 raz i dla wywołania za drugim razem zostanie to zignorowane. I bez zatrzymania wyświetli wynik jednorazowo.
Ilekroć używasz 'include_once ()', można użyć w pliku, aby dołączyć inny plik, gdy potrzebujesz więcej niż jeden raz wywoływany plik w bieżącym pliku. Tutaj w przykładzie mam plik o nazwie test3.php.
I w innym pliku, który nazwałem test4.php
podczas oglądania m, w tym plik test3, załączy plik jeden raz, ale zatrzyma dalsze wykonywanie.
źródło
Użyj „dołącz” dla szablonów PHP wielokrotnego użytku . Użyj „wymagaj” dla wymaganych bibliotek.
„* _once” jest fajne, ponieważ sprawdza, czy plik jest już załadowany, czy nie, ale ma sens tylko dla mnie w „Requ_once”.
źródło
Definicje klas i funkcji powinny być uporządkowane w plikach.
Służy
require_once()
do ładowania zależności (klas, funkcji, stałych).Służy
require()
do ładowania plików podobnych do szablonów .Służy
include_once()
do ładowania opcjonalnych zależności (klas, funkcji, stałych).Służy
include()
do ładowania opcjonalnych plików podobnych do szablonów .źródło
Odpowiedź po 7 latach na 2018 rok
To pytanie zostało zadane siedem lat temu i żadna z odpowiedzi nie stanowi praktycznej pomocy dla pytania. We współczesnym programowaniu PHP używasz
required_once
tylko raz, aby dołączyć klasę autoloadera (często autoloader kompozytora), i załaduje wszystkie twoje klasy i funkcje (pliki funkcji muszą zostać jawnie dodane docomposer.json
pliku, aby były dostępne we wszystkich innych plikach). Jeśli z jakiegokolwiek powodu twojej klasy nie można załadować z autoloadera, którego używaszrequire_once
do załadowania.Jest kilka okazji, z których musimy skorzystać
require
. Na przykład, jeśli masz naprawdę dużą definicję tablicową i nie chcesz dodawać jej do kodu źródłowego definicji klasy, możesz:Jeśli plik, który zamierzasz dołączyć, zawiera coś wykonywalnego lub deklaruje niektóre zmienne, prawie zawsze musisz go użyć
require
, ponieważ jeśli użyjeszrequire_once
oprócz pierwszego miejsca, twój kod nie zostanie wykonany i / lub twoje zmienne nie będą cicho inicjowane, powodując błędy, które są absolutnie trudne do ustalenia.Nie ma praktyczny przypadek użycia dla
include
iinclude_once
naprawdę.źródło
include()
owiniętego bufora wyjściowego, aby zaimplementować silnik szablonów.require()
do dzielenia dużych plików.require_once
z PHPMailer wewnątrz funkcji, a mój autoloader definiuje$mail
zmienną potrzebną później w kodzie, więc następnyrequire_once
zostaje zignorowany, który$mail
nie został zainicjowany! rozwiązaniem było po prostu użyćrequire
po wywołaniu funkcji.require
w takich przypadkach?Różnica polega na błędzie generowanym przez polecenia. Dzięki
require
plikowi, którego chcesz użyć, jest naprawdę wymagany i dlatego generuje,E_ERROR
jeśli nie został znaleziony.include
generujeE_WARNING
błąd tylko w przypadku niepowodzenia, który jest mniej lub bardziej cichy.Użyj go, jeśli plik jest wymagany, aby pozostały kod działał i chcesz, aby skrypt nie zadziałał. Plik nie jest dostępny.
Dla
*_once()
:To samo dotyczy
require_once()
oczywiście.Numer referencyjny:
require()
,include_once()
źródło
require
daje E_COMPILE_ERROR, a nie E_ERROR.Z wymaganiem plik musi istnieć, jeśli nie, pojawi się błąd; natomiast z włączeniem - jeśli plik nie istnieje, to strona będzie nadal ładować.
źródło
Wymagaj części krytycznych, takich jak autoryzacja i dołącz wszystkie pozostałe.
Wiele załączników to po prostu bardzo zły projekt i należy go w ogóle unikać. Tak więc * _once nie ma znaczenia.
źródło
Dołącz / Wymagaj , możesz dołączyć ten sam plik więcej niż jeden raz:
Wymagaj_once / include_once
źródło
include()
wygeneruje ostrzeżenie, gdy nie znajdzie pliku, alerequire_once()
wygeneruje błąd krytyczny.Inną kwestią jest to, czy plik jest dołączany wcześniej. Wówczas
require_once()
nie będzie go uwzględniać.źródło
Korzystałem z funkcji, jak poniżej:
W xyz.php zadeklarowano stałe wartości.
Muszę wywołać tę funkcję doSomething () z innego pliku skryptu PHP.
Ale obserwowałem zachowanie podczas wywoływania tej funkcji w pętli, dla pierwszej iteracji doSomething () uzyskiwał stałe wartości
xyz.php
, ale później każda iteracjadoSomething()
nie była w stanie uzyskać zadeklarowanych wartości stałychxyz.php
.Rozwiązałem problem, przechodząc z
require_once()
nainclude()
, zaktualizowanydoSomething()
kod wygląda następująco:Teraz każde wywołanie iteracji
doSomething()
otrzymuje stałe wartości zdefiniowane wxyz.php
.źródło
Z instrukcji :
To samo dotyczy
_once()
wariantów.źródło
W dobie
PSR-0 / PSR-4
autoloaderów może być zupełnie niepotrzebne korzystanie z którejkolwiek z instrukcji, jeśli wszystko, czego potrzebujesz, to udostępnić kodowi niektóre funkcje / klasy (oczywiście nadal musisz sięrequire_once
autoloader w pliku bootstrap iinclude
szablonach, jeśli nadal używam PHP jako silnika szablonów).źródło
Kiedy należy użyć
require
lubinclude
?Funkcje
require
iinclude
wykonują to samo zadanie, tj. Obejmuje i ocenia określony plik, ale różnica polega narequire
tym, że błąd krytyczny spowoduje błąd krytyczny, gdy określona lokalizacja pliku będzie nieprawidłowa lub wystąpi dowolny błąd,include
wygeneruje ostrzeżenie i kontynuuje wykonywanie kodu.Możesz więc użyć tej
require
funkcji w przypadku, gdy plik, który próbujesz dołączyć, jest sercem systemu i może mieć ogromny wpływ na resztę kodu i możesz użyćinclude
funkcji, gdy plik, który próbujesz dołączyć, jest prosty plik zawierający nieco mniej ważny kod.A moim osobistym zaleceniem (w przypadku mniej ważnego kodu) jest wybranie
require
funkcji w dowolnym miejscu w kodzie, gdy jest on w fazie programowania, tak aby można było debugować kod, a następnie zastąpić wszystkierequire
funkcjeinclude
funkcją przed przeniesieniem go do wersji produkcyjnej, aby w razie pominięcia wszelkie błędy nie wpłyną na użytkownika końcowego, a reszta kodu zostanie wykonana poprawnie ...Kiedy należy użyć
require_once
lubrequire
?Podstawową różnicą między
require
irequire_once
jestrequire_once
sprawdzenie, czy plik jest już dołączony, czy nie, jeśli jest już dołączony, to nie uwzględni pliku, podczas gdyrequire
funkcja obejmie plik niezależnie od tego, czy plik jest już dołączony, czy nie.Tak więc w przypadkach, w których chcesz raz po raz włączyć jakiś fragment kodu, użyj
require
funkcji, a jeśli chcesz dołączyć jakiś kod tylko raz w kodzie, użyjrequire_once
.źródło
Użyj funkcji wymaganej, gdy musisz załadować dowolną klasę, funkcję lub zależność.
Użyj funkcji dołączania, gdy chcesz załadować plik w stylu szablonu
Jeśli nadal jesteś zdezorientowany, po prostu używaj wymaganego przez cały czas.
źródło
Są to wszystkie sposoby dołączania plików.
Wymagaj oznacza, że tego potrzebuje. Require_once oznacza, że będzie go potrzebował, ale wymaga go tylko raz. Uwzględnij oznacza, że będzie zawierać plik, ale nie musi go kontynuować.
Przykłady:
Istnieje również funkcja include_once, która zawiera plik raz.
Nie używaj wielkich liter tam, gdzie mam, pisząc z telefonu.
źródło
jedną rzeczą, którą zauważyłem, gdy korzystam z opcji Dołącz, mogę uzyskać dostęp tylko do funkcji dołączonych plików z pliku, który ją zawiera. Dzięki wymaganiu mogę uruchomić tę funkcję w drugim pliku wymagane_pomnie.
też: polecam dodanie
Ponieważ gdy request_once zabija stronę, czasami może wywołać echo katalogu plików Twojej witryny
Oto niestandardowa funkcja, którą stworzyłem, aby wymagała plików:
przykład użycia:
źródło
Zasadniczo, jeśli potrzebujesz złej ścieżki, PHP zgłasza błąd krytyczny i wywoływana jest funkcja zamykania, ale jeśli podasz niewłaściwą ścieżkę, PHP będzie kontynuować wykonywanie, ale wyświetli ostrzeżenie, że plik nie istnieje.
Z angielskiego słowa wymaganego PHP wynika, że wykonanie strony lub pliku zależy od wymaganego pliku.
Z mojego doświadczenia wynika, że normalnie wymagane są ważne pliki, takie jak pliki konfiguracyjne, klasy baz danych i inne ważne narzędzia.
źródło
Często zależy od tego, czy chcesz warunkowo załadować bibliotekę klienta, czy też załadować ją bez względu na to, czy chcesz z niej korzystać.
Oto konkretny przykład; opracowanie tego, co powiedział pcj.
Załóżmy, że masz plik konfiguracyjny przechowujący nazwę użytkownika i hasło do bazy danych (conf.php):
I klasa z funkcją statyczną, która korzysta z bazy danych:
I ta funkcja statyczna jest używana wewnątrz innej funkcji, która jest wywoływana iteracyjnie w pętli:
Możesz wymagać / dołączyć klasę tylko raz. Jeśli potrzebujesz / dołączasz go do każdej iteracji swojej pętli, pojawi się błąd. Należy jednak dołączyć plik conf za każdym razem, gdy wywoływana jest funkcja statyczna.
Oczywiście przeniesienie go poza funkcję może być rozwiązaniem tego problemu:
Chyba że zajmujesz się obciążeniami związanymi z ładowaniem klasy, która może być używana tylko w określonych warunkach i nie chcesz jej ładować, gdy nie jest.
źródło
require
ma większy narzut niżinclude
, ponieważ musi najpierw przeanalizować plik. Wymianarequires
zincludes
często jest to technika dobra optymalizacja.źródło
require
nie analizuje pliku bardziej niżinclude
robi. Każda z_once
wersji tych funkcji ma trochę narzutów, ale jak powiedzieli inni, w większości aplikacji jest prawie nieistotna.Wystarczy użyć wymaga i obejmuje.
Ponieważ zastanów się, jak pracować z include_once lub replace_once. To szuka danych dziennika, które zapisują dołączone lub wymagane pliki PHP. To jest wolniejsze niż włączanie i wymaganie.
Po prostu używam w ten sposób ...
źródło