ما هو مبدأ التحميل التلقائي في PHP؟
-
21-09-2019 - |
سؤال
spl_autoload_register
هل يمكنني القيام بهذا النوع من العمل ، لكنني لا أفهم كيف يتم هذا النوع من الوظائف؟
spl_autoload_register(array('Doctrine', 'autoload'));
المحلول
الفكرة الأساسية هي أنه ليس عليك الكتابة include
/require
التعليمات بعد الآن: كلما حاولت استخدام فئة غير محددة ، ستتصل PHP بـ Autoloader.
وظيفة التحميل التلقائي ، إذن ، هي تحديد الملف الذي يجب تحميله ، و include
هذا ، لذلك يصبح الفصل محدد.
يمكن لـ PHP استخدام هذا الفصل ، كما لو كنت الشخص الذي كتب include
التعليمات ، التي تم تنفيذها في الواقع في وظيفة التحميل التلقائي.
"الخدعة" هي أن وظيفة التحميل التلقائي:
- يستقبل فقط اسم الفصل
- يجب أن تحدد الملف الذي سيتم تحميله - أي الملف الذي يحتوي على تلك الفئة.
هذا هو السبب في تسمية الاتفاقية ، مثل Pear One ، التي تقول هذه الفئة مثل Project_SubProject_Component_Name
يتم تعيينها إلى ملفات مثل Project/SubProject/Component/Name.php
-- بمعنى آخر '_
'في أسماء الفصول ، يتم استبدالها بواسطة مائلة (الدلائل ، الدلائل الفرعية) على نظام الملفات.
على سبيل المثال ، إذا ألقيت نظرة على Doctrine_Core::autoload
الطريقة ، وهي تلك التي سيتم تسميتها كإحدادية تلقائية في قضيتك ، فهي تحتوي على هذا الجزء من التعليمات البرمجية (بعد التعامل مع بعض الحالات المحددة) :
$class = self::getPath()
. DIRECTORY_SEPARATOR .
str_replace('_', DIRECTORY_SEPARATOR, $className)
. '.php';
if (file_exists($class)) {
require $class;
return true;
}
return false;
مما يعني أن اسم الفصل هو تعيين نظام الملفات ، واستبداله "_
' بواسطة '/
'، وإضافة نهائي .php
إلى اسم الملف.
على سبيل المثال ، إذا كنت تحاول استخدام Doctrine_Query_Filter_Chain
الفصل ، وهو غير معروف من قبل PHP ، Doctrine_Core::autoload
سيتم استدعاء الوظيفة ؛ سيحدد أن الملف الذي يجب تحميله هو Doctrine/Query/Filter/Chain.php
؛ ومع وجود هذا الملف ، سيتم تضمينه - مما يعني أن PHP الآن "يعرف" Doctrine_Query_Filter_Chain
صف دراسي.