انتقل إلى محتوى الدرس

Custom Autoloader with spl_autoload_register التحميل التلقائي بدالة spl_autoload_register

تخلص من استدعاءات require اليدوية عبر إتقان spl_autoload_register ومعيار PSR-4 وإدارة الحزم بأداة Composer.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

تقوم الدالة المدمجة spl_autoload_register() بتسجيل دالة رد نداء يستدعيها محرك PHP تلقائياً ويمرر إليها الاسم الكامل للصنف (مع مجال الأسماء) فور طلب صنف غير محمل.

  • تستقبل دالة التحميل التلقائي معاملاً نصياً واحداً $class يمثل الاسم الكامل للصنف (مثل "App\Services\TaxService" بدون شرطة مائلة بادئة).
  • داخل الدالة، يتم استبدال فواصل مجال الأسماء \ بفواصل المجلدات / وإضافة الامتداد .php ثم تضمين الملف إذا كان موجوداً.
  • يمكن تسجيل عدة محملات تلقائية في طابور منظم؛ فإذا لم يجد الأول الملف ينتقل PHP تلقائياً للمحمل التالي.

عند طلب الصنف App\Billing\InvoiceGateway، يستدعي PHP تلقائياً الدالة المسجلة في spl_autoload_register() ويحول اسم الصنف إلى مسار ملف.

PHP
<?php
$resolvedPath = "";
spl_autoload_register(function (string $class) use (&$resolvedPath): void {
    $relative = str_replace("\\", "/", $class) . ".php";
    $resolvedPath = __DIR__ . "/src/" . $relative;
});

class_exists("App\\Billing\\InvoiceGateway", true);
echo basename($resolvedPath) . " -> " . str_contains($resolvedPath, "src/App/Billing/InvoiceGateway.php") . "\n";