Automatyczne ładowanie klas w OOP w PHP
Wiesz już, że aby skorzystać z
jakiejkolwiek klasy, musimy ją podłączyć
przez require. Gdy w projekcie
jest bardzo wiele klas, powstaje wiele
podłączeń, które bardzo niewygodnie jest pisać
i trudno kontrolować.
Dla rozwiązania tego problemu w PHP dodano automatyczne ładowanie klas. Automatyczne ładowanie pozwala PHP automatycznie ładować plik z klasą przy próbie odwołania się do tej klasy w kodzie. Jednakże, tak po prostu klasy nie będą się ładować - należy je umieścić w folderach strony w specjalny sposób, przestrzegając jakiejś konwencji nazw plików i folderów klas. Można używać wbudowanej w PHP konwencji, albo wymyślić własną i jej używać.
Zacznijmy od standardowej konwencji PHP. Konwencja ta polega na tym, że jeśli mamy pewien plik z klasą, to ścieżka po folderach strony do tego pliku musi pokrywać się z przestrzenią nazw pliku, a nazwa pliku musi pokrywać się z nazwą przechowywanej w nim klasy. Jednocześnie nazwy folderów i pliku muszą być zapisane małymi literami.
Spójrzmy na przykładzie. Załóżmy, że mamy następującą klasę:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Zgodnie z konwencją ta klasa powinna znajdować się
w folderze /core/admin/ w pliku
pagecontroller.php.
Teraz w pliku index.php użyjmy
naszej klasy, nie podłączając jej przez require,
a używając automatycznego ładowania. W tym celu na początku
pliku, w którym wywoływane są klasy, należy
wywołać funkcję spl_autoload_register.
Zróbmy to:
<?php
spl_autoload_register(); // włączamy automatyczne ładowanie
$obj = new Core\Admin\PageController; // spokojnie tworzymy obiekt
?>
W pliku index.php włącz automatyczne
ładowanie klas. Przestrzegając konwencji o nazwach
folderów i plików stwórz klasę Core\User,
klasę Core\Admin\Controller i klasę
Project\User\Data. W pliku index.php
stwórz obiekty tych klas.