Różnica pomiędzy funkcjami include() a include_once() w PHP

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.

Podsumowując, żeby unikać tego typu błędów bezpieczniej jest używać funkcji iclude_once(), jednak jeśli jesteś dobrze zaznajomiony z kodem PHP danej aplikacji, lepiej jest korzystać z funkcji include() – jest szybsza w wywoływaniu.

Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Więcej informacji

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close