Autoloading e Klasave në OOP në PHP
Ju tashmë e dini se për të përdorur
ndonjë klasë, ne duhet ta përfshijmë
atë përmes require. Kur në një projekt
ka shumë klasa, atëherë rezultojnë shumë
përfshirje, të cilat janë shumë të papërshtatshme për t'u shkruar
dhe të vështira për t'u kontrolluar.
Për zgjidhjen e këtij problemi në PHP u shtua autoloading i klasave. Autoloading-u i lejon PHP-t të ngarkojë automatikisht skedarin e një klase kur përpiqet të aksesojë atë klasë në kod. Megjithatë, klasat thjesht nuk do të ngarkohen vetë - ato duhet të vendosen në dosjet e sajtit në një mënyrë të veçantë, duke ndjekur ndonjë marrëveshje për emrat e skedarëve dhe dosjeve të klasave. Mund të përdorni marrëveshjen e integruar në PHP, ose të krijoni tuajën dhe ta përdorni atë.
Le të shqyrtojmë së pari marrëveshjen standarde të PHP. Kjo marrëveshje konsiston në faktin se nëse kemi një skedar me një klasë, atëherë rruga përmes dosjeve të sajtit drejt këtij skedari duhet të përputhet me hapësirën e emrave të skedarit, dhe emri i skedarit duhet të përputhet me emrin e klasës që gjendet brenda tij. Në këtë rast, emrat e dosjeve dhe skedarit duhet të jenë me shkronja të vogla.
Le ta shohim me një shembull. Le të themi se kemi këtë klasë:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Sipas marrëveshjes, kjo klasë duhet të vendoset
në dosjen /core/admin/ në skedarin
pagecontroller.php.
Tani le të përdorim në skedarin index.php klasën tonë,
pa e përfshirë atë përmes require,
por duke përdorur autoloading-un. Për këtë, në fillim
të skedarit, ku thirren klasat, duhet
të thirret funksioni spl_autoload_register.
Le ta bëjmë këtë:
<?php
spl_autoload_register(); // aktivizojmë autoloading-un
$obj = new Core\Admin\PageController; // krijojmë objektin me qetësi
?>
Në skedarin index.php aktivizoni ngarkimin automatik
të klasave. Duke ndjekur marrëveshjen për emrat
e dosjeve dhe skedarëve, krijoni klasën Core\User,
klasën Core\Admin\Controller dhe klasën
Project\User\Data. Në skedarin index.php
krijoni objekte të këtyre klasave.