Automatyczne ładowanie kodu klas

Zazwyczaj kod poszczególnej klasy przechowuje się w osobnym pliku, którego nazwa jest zgodna z nazwą klasy. Warto utworzyć zasób z plikami klas i tam je przechowywać.

Dla przykładu kod klasy Drzewo powinien być przechowywany w pliku Drzewo.php.

Można w każdej chwili dołączyć za pomocą instrukcji include plik klasy, ale jest dużo lepszy sposób na zarządzanie plikami z kodem klas.

spl_autoload_register

To wbudowana w PHP funkcja spl_autoload_register.

Aby ją zastosować, należy napisać swoją funkcję, która będzie odpowiadać za ładowanie plików klas. Argumentem tej funkcji powinna być nazwa klasy.

Zatem spl_autoload_register sprawdza, czy w kodzie strony/aplikacji pojawia się użycie dowolnej klasy, gdy zaś brakuje załadowanego pliku kodu klasy, wywołuje funkcję ładującą, której argumentem jest właśnie nazwa brakującej klasy.

To w pełni automatyzuje cały proces i do pliku źródłowego strony załadują się wszystkie pliki klas, które zostały w niej użyte.

Oto przykład:

Przykład 1

<?php
function LoadClass($klasa){
require "/klasy/$klasa.php";
}
spl_autoload_register('LoadClass'); ?>

Powyższy przykład to szablon Loadera.

Najpierw definiujemy własną funkcję LoadClass, która posiada jeden argument $klasa. W ciele funkcji jest tylko jedna instrukcja (require), która dołącza do strony kod pliku klasy o nazwie przekazanego argumentu $klasa i rozszerzeniu php. Oczywiście plik klasy powinien znajdować się w katalogu klasy w folderze głównym kodu strony.

Powyższy kod powinien znajdować się na samym początku kodu strony. Gdy interpreter podczas przetwarzania kodu strony napotka na użycie klasy np. Drzewo, to gdy napotka ją pierwszy raz - wywoła funkcję LoadClass('Drzewo'), funkcja ta dołączy do danej strony plik klasy/Drzewo.php z kodem tej klasy. Dołączenie następuje tylko raz.

Prawda, że cudowne rozwiązanie?

Należy dodać, że ten sposób automatycznego dołączania klas pojawił się od wersji PHP 5.1.0, 7 i 8.





© medianauka.pl, 2021-11-28, A-4288



Udostępnij
©® Media Nauka 2008-2023 r.