یکی از موضوعات مهم در برنامه های مولتی فایل که از چندین فایل تشکیل شدن، لود کردن فایل ها با ترتیب درست هست.
اگر بخواهیم با
include یا require عمل autoloading رو انجام بدیم قطعا کد کثیفی داریم، ممکنه بعضی مواقع تا هزاران فایل داشته باشیم که نمیشه هزار بار require کرد که ترتیب لود فایل ها هم به مشکل نخوره.برای این موقعیت تابعی توی
php وجود داره به نام spl_autoload_register که ورودی اون یک callable هست.بریم یک مثال ازش بنویسیم:
spl_autoload_register(function ($className) {
require_once "$className.php";
});
همانطور که گفته شد ورودی تابع یک فانکشن هست، این فانکشن به صورت پیشفرض نام کلاس صدا زده شده را به همراه دارد که در مثال بالا در متغییر $className قرار دارد.درون این فانکشن شما باید عملیاتی که می خواهید برای لود شدن کلاس انجام شود را بنویسید.
در مثال بالا تنها فایل با نام کلاس و پسوند
php صدا زده شده.متغییر
$className در حالت عادی نام کلاس شما هست، اگر کلاسی با نام User را صدا بزنیم مقدار $className برابر با User میشود.اگر در پروژه خود از
namespace ( راجب namespace ها بخوانید ) استفاده کنید مقدار $className برابر با:namespace + classname به عوان مثال اگر یک
namespace با نام MyProject\Class داشته باشید و یک کلاس به نام User، مقدار $className برابر با MyProject\Class\User می شود.در نهایت نکاتی که بسیار مهم هستند برای استفاده از
autoload :1- توجه داشته باشید نام
namespace دقیقا با ساختار پوشه بندی شما یکی باشد. (حساس به حروف کوچک و برزگ)2- نام کلاسی که درون یک فایل قرار دارد دقیقا با نام فایل یکی باشد. (حساس به حروف کوچک و برزگ)
کافی است
spl_autoload_register را درون یک فایل بنوسید و بسته به پروژه خود آن را برنامه ریزی کنید.سپس فایل
autoload را در اولین قسمت پروژه require کنید و بقیه require هارا به autoload بسپارید.مورد آخر درصورتی که پروژه شما ساختار استانداردی داشته باشد میتونید از
composer هم استفاده کنید به جای autoloader شخصی سازی شده..