Dzisiejszy wpis poświęcony jest różnicą pomiędzy 2 podobnymi funkcjami w PHP: include() i include_once()
Funkcja include_once() dołącza do skryptu określony plik w trakcie wykonywania skryptu. Ścieżka do pliku powinna zostać zawarta jako argument funkcji. To zachowanie jest podobne do include() z tą różnicą, że jeśli dany plik został już dołączony w skrypcie, to nie zostanie ponownie włączony. Jak sama nazwa wskazuje, zostanie dołączony tylko raz.
Co to dokładnie znaczy? Rozważmy to na przykładzie.
Załóżmy, że mamy 3 pliki:
FUNCTIONS.PHP
GLOBALS.PHP
HEADER.PHP
Każdy z nich wygląda następująco:
FUNCTIONS.PHP
<?php function foo(){ echo 'some code'; } ?>
GLOBALS.PHP:
<?php include('FUNCTIONS.PHP'); foo(); ?>
HEADER.PHP
<?php include('FUNCTIONS.PHP'); include('GLOBALS.PHP'); foo(); ?>
Teraz jeśli spróbujemy otworzyć plik HEADER.PHP dostaniemy błąd, ponieważ plik GLOBALS.PHP także dołącza plik FUNCTIONS.PHP. Dostaniemy błąd mówiący, że funkcja foo() została już zadeklarowana w pliku GLOBALS.PHP, a jest również w pliku HEADER.PHP – co oznacza, że mamy dołączony plik FUNCTIONS.PHP dwa razy.
Jeśli chcemy mieć pewność, że plik FUNCTIONS.PHP zostanie dołączony tylko raz, należy użyć funkcji include_once(), plik HEADER.PHP powinien wyglądać następująco:
HEADER.PHP
<?php include_once('FUNCTIONS.PHP'); include('GLOBALS.PHP'); ?>
Teraz, gdy otworzysz plik HEADER.PHP nie wyświetli się żaden błąd, skrypt PHP dołączy plik FUNCTIONS.PHP tylko raz.
W innej sytuacji możemy chcieć dołączać wielokrotnie w różnych miejscach plik PHP który np zawiera kawałek kodu HTML a nie zawiera definicji żadnej funkcji lub klasy. W takiej sytuacji powinniśmy używać funkcji include()
Mam nadzieję, że już rozumiesz różnicę między tymi dwoma funkcjami. Jeśli nadal masz pytania – pisz w komentarzu:)