კლასების ავტოიტვირთვა OOP-ში 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
შექმენით ამ კლასების ობიექტები.