Notatki PHP

prywatne zapiski na kamieniu

Kiedy należy stosować funkcję require(), a kiedy funkcję include()?
Kiedy należy zastosować funkcję use require_once(), a kiedy require()?

Funkcja require() wydaje się być identyczna z include(), jednakże w różny sposób obsługują one błędy. Jeśli pojawią się błędy, funkcja include() wygeneruje ostrzeżenia warning, ale skrypt będzie starał się do końca wykonać. Inaczej będzie z require() - ta wygeneruje błąd fatalny i zatrzyma działanie skryptu.

Funkcja require_once() jest zgoła identyczna jak funkcja require() poza tym, że PHP sprawdzi, czy plik czasem nie został już wcześniej podłączony i jeśli tak, nie podłączy go już ponownie.

Funkcja require() wykonuje się szybciej niż require_once(), tak więc jeśli jesteśmy pewni, że nie będzie problemów z możliwym zwielokrotnionym wywoływaniem odwołań podłączeń do pliku, to używajmy require().

Funkcję require() stosuje się, gdy plik jest wymagany przez skrypt "do życia", np. wywołuje plik z szablonem z komunikatami danych lub plik zawiera startowe definicje konfiguracji, bez których cała aplikacja przerwałaby swoje działanie i się położyła, gdyby coś poszło nie tak.

Funkcja require_once() stosujemy wtedy, gdy plik zawiera kod mogący wygenerować błędy wynikające z nieoczekiwanego wywołania pliku z podsekwencjami wywołań, np. wtedy, gdy będzie zawierać np.funkcje important() { /* important code */}  niezbędną do działania aplikacji, lecz one nie mogą być ponownie i ponownie deklarowane - co będzie wywoływać masowo błędy - one nie mogą być deklarowane wielokrotnie w tym samym skrypcie.

Funkcję include() stosujemy wtedy, kiedy dany plik nie jest warunkiem koniecznym wymaganym do działania - aplikacja będzie nadal działać, nawet gdy nie zostanie on z jakiegoś powodu podłączony w procesie np. w zastosowaniach do szablonów prezentacji danych, szablonów bieżących obliczeń itp. 
 

Funkcja include_once() stosujemy wówczas, kiedy opcjonalne zależności mogłyby wygenerować błędy wyliczeń wynikające z wielokrotnego wywołania przez wielu użytkowników strony, czy też by uniemożliwić zdalne podłączenie pliku w ataku zamierzonym na kod - zawsze, gdy nie chcemy, by była możliwość kolejnych wywoływań danego pliku przez np. przeciążenie z HTTP. 

To oznacza, że zastosowanie require_once() należy do 99% przypadków. Użycie polecenia require() lub include() oznaczać może, że twój kod nie nadaje się do ponownego użycia w innym miejscu, tzn. gdy skrypty które uruchamiasz, faktycznie wykonują tylko ten kod zamiast udostępniać klasę lub niektóre funkcje bibliotek, jeśli potrzebujesz dołączyć kod, który wykonuje się od razu na miejscu, np. kody procedur i musisz się podłączyć do nich, by poznać nowy paradygmat - jest to przydatne w programowaniu obiektowym, programowaniu funkcji.

Jeśli programujesz obiektowo lub programujesz przy użyciu funkcji, użycie include_once() polega głównie na układaniu w warstwy, gdzie w stosie znajdą się bugi / błędy. gdy chcesz wiedzieć, że np. funkcja do_cool_code() nie jest dostępna, gdy przejdziesz do niej później, lub w momencie, gdy oczekujesz jej dostępności przez wymaganie biblioteki. Generalnie najlepiej jest od razu wiedzieć czy coś, co potrzebujesz jest dostępne - i użyj wtedy właśnie require_once().