Автоматично зареждане на класове в ООП в PHP
Вече знаете, че за да използвате
даден клас, трябва да го включите
чрез require. Когато в проекта
има много класове, се получават много
включвания, които е много неудобно да се пишат
и трудно се контролират.
За решаване на този проблем в PHP беше добавена автоматично зареждане на класове. Автоматичното зареждане позволява на PHP автоматично да зарежда файла на клас при опит за достъп до този клас в кода. Обаче, класовете няма просто така да се зареждат - те трябва да бъдат разположени в папките на сайта по специален начин, следвайки някакво споразумение за имената на файловете и папките на класовете. Може да използвате вграденото в PHP споразумение, или да измислите свое и да го използвате.
Нека първо разгледаме стандартното споразумение на PHP. То се състои в това, че ако имаме някакъв файл с клас, тогава пътят през папките на сайта до този файл трябва да съвпада с пространството от имена на файла, а името на файла трябва да съвпада с името на съдържащия се в него клас. При това имената на папките и файла трябва да са с малки букви.
Нека разгледаме с пример. Да приемем, че имаме следния клас:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Според споразумението този клас трябва да се намира
в папка /core/admin/ във файла
pagecontroller.php.
Нека сега във файла index.php използваме
нашия клас, без да го включваме чрез require,
а използвайки автоматично зареждане. За това в началото
на файла, в който се извикват класове, трябва
да се извика функцията spl_autoload_register.
Нека направим това:
<?php
spl_autoload_register(); // включваме автоматично зареждане
$obj = new Core\Admin\PageController; // спокойно създаваме обект
?>
Във файла index.php включете автоматично
зареждане на класове. Следвайки споразумението за имената
на папки и файлове направете клас Core\User,
клас Core\Admin\Controller и клас
Project\User\Data. Във файла index.php
създайте обекти от тези класове.