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

PHP: include vs include_once

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:)