سؤال

أنا لا أحصل حقا على مستندات SPL_AUTOLOAD

bool spl_autoload_register  ([ callback $autoload_function  ] )

من فهمي، سيحاول تشغيل الوظائف المسجلة عندما يأتي PHP عبر فئة غير محملة بالفعل. مثال،

public function autoload() {
    require ('nonLoadedClass.php');
}
spl_autoload_register(autoload);
$x = new nonLoadedClass();

سوف تسبب حالات التشغيل؟ لذلك يمكنني أيضا تسجيل العديد من وظائف التلقيح التلقائي؟

public function autoloadXXX() {...}
public function autoloadYYY() {...}
public function autoloadZZZ() {...}
spl_autoload_register('autoloadXXX');
spl_autoload_register('autoloadYYY');
spl_autoload_register('autoloadZZZ');

في حالة العقيدة،

require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));

يتم تمرير مجموعة، لذلك أعتقد أنه سيحاول تشغيل وظيفة التلقيح التلقائي داخل فئة العقيدة (التي كانت مطلوبة)؟

هل كانت مفيدة؟

المحلول

spl_autoloader_register يسجل وظيفة / طريقة رد الاتصال، والتي سيتم استدعاؤها عندما يحاول الكود الخاص بك استخدام فئة غير معروفة.

أ أتصل مرة أخرى يمكن وصف الوظيفة بعدة طرق:

  • اسم وظيفة بسيط: 'my_function'
  • طريقة ثابتة للفئة: array('MyClass', 'myMethod')
  • طريقة مثيل الفصل: array($myObject, 'myMethod')

في حالة العقيدة، يبدو أنه الحل الثاني: إذا كان الفصل الذي لا يعرفه PHP يستخدمه، فسوف يتصل التحميل الذاتي Doctrine::autoload, ، اجتيازها اسم الفصل كمعلمة.


لذلك يمكنني أيضا تسجيل العديد من وظائف التلقيح التلقائي؟

نعم، يمكنك، مع spl_autoload_register :

إذا كان يجب أن يكون هناك وظائف توليفات متعددة، spl_autoload_register()يسمح لهذا. يقوم بفعالية بإنشاء قائمة انتظار لوظائف AutoLoad، ويتم تشغيلها من خلال كل منها بالترتيب الذي يتم تعريفه.

لكننا لا نحدد عموما وظيفة / طريقة واحدة للتحميل التلقائي لكل فئة لدينا؛ سيكون ذلك غير فعال تماما، أفترض.

بدلا من ذلك، نستخدم اسم الفصل، الذي يتم استلامه بواسطة وظيفة التحميل التلقائي، لتحديد الملف الذي يجب تضمينه.

على سبيل المثال، قد تبدو وظيفة التحويل التلقائي هكذا:

function my_autoloader($className)
{
    require LIBRARY_PATH . '/' . $className . '.php';
}

الخدعة هي أنه إذا تم تسمية ملفاتك باسم الفصول التي تحتوي عليها، فإنها أصبحت بشكل مباشر أسهل كثيرا ؛-)

هذا هو السبب في أنه غالبا ما يتم تسمية الفصول باستخدام اتفاقية الكمثرى: My_Class_Name خرائط للملف My/Class/Name.php

نصائح أخرى

بيانك بالكامل صحيح.

spl_autoload_register يسمح لك بتسجيل وظائف توليفات متعددة. في الحالة التي تحاول إنشاء أو استخدام كائن من الفئة التي لم يتم تحميلها في بيئة PHP، ستقوم PHP بتشغيل جميع وظائف التدوير المحفوظة التي تبحث عن تلك الفئة.

مثال المبدأ الذي تقدمه هو استخدام ما يسمى أتصل مرة أخرى لتسجيل طريقة داخل الفصل. رد الاتصال ببساطة صفيف يحتوي على اسم الفصل (للطرق الثابتة) أو مثيل لهذه الفئة (للطرق غير الثابتة)، واسم الطريقة.

ما يقول هو الصحيح. يطلق عليه عند إنشاء فئة غير معروفة. ثم تحصل على فرصة لتضمين / تتطلب الملف الضروري.

عندما تكون الوظيفة موجودة في الفصل، عليك أن تمر في صفيف. في هذه الحالة إنها وظيفة ثابتة لأنها تمر في فئة العقيدة بدلا من مثيل فئة العقيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top