سؤال

يمكنني استخدام Autoloader لتضمين الفصول. ما أفعله الآن هو استخدام "GLOB" لقراءة DIR المختلفة ودفعها في صفيف. هل هناك حل أفضل لهذا؟

$path = './';

$files = array_merge(
glob($path.'includes/classes/system/*.class.php'),
glob($path.'includes/classes/system/baseclasses/*.class.php'),
glob($path.'includes/classes/system/systementities/*.class.php'));

تعديل:

أنا استخدم هذا داخل فئة التحميل التلقائي. المشكلة هي أنه يجب علي البحث عن الملفات مع GLOB. هل هناك طريقة أسرع للقيام بذلك؟

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

المحلول

سيتم تشغيل التحميل التلقائي كلما كنت تحاول استخدام فصل لا يعرف PHP. إذا كنت تستخدم include/require, ، سوف يمر PHP بجميع الدلائل التي حددتها لك include_path في php.ini ، لذلك يجب ألا يكون هناك سبب للاستخدام glob. في حالتك ، يجب أن يكون كافيًا لتعيين ملف include_path ل

/path/to/includes/classes/system/

ال أسرع طريقة لتضمين الملفات هي استخدام ملف خريطة Class2File. ومع ذلك ، فإن هذا يتطلب منك إنشاء مثل هذه الخريطة والاحتفاظ بها عند تعديل التطبيق الخاص بك.

نصائح أخرى

لقد حلت PHP بالفعل هذه المشكلة بالنسبة لك. استخدم PHP المدمج في Autoloader. لا تقم مطلقًا بتشغيل خاص بك عندما توفرها اللغة/الإطار لك.

function __autoload($class) {
  $classfile = $class.'.class.php';
  $path = './includes/classes/system/';
  if (is_file($path.$classfile)) require_once($path.$classfile);
  if (is_file($path.'baseclasses/'.$classfile)) require_once($path.'baseclasses/'.$classfile);
  if (is_file($path.'systementities/'.$classfile)) require_once($path.'systementities/'.$classfile);
}

... والتي لا تزال ليست هي الطريقة الأكبر ، لكنها تجعلك تستخدم GLOB (). إذا كنت تقوم عادةً بتحميل جميع حالاتك ، فيجب أن يكون هناك قائمة متطلبات () متطايرة في برنامج نصي التمهيد/التكوين. هناك الكثير من الخيارات حول كيفية تنظيم ملفات الفئة وجلبها. لتقليل الوقت في البحث عن البرامج النصية ، يمكنك التفكير في Filetree كواجهة. من أجل البساطة ، يمكنك وضع جميع الطبقات غير الإلزامية في نفس المجلد ، مما يقلل من مكالمات IS_FILE () إلى واحدة.

في نظامي ، لدي فئات كائنات مجمعة في مجلدات مع البرامج النصية للسيطرة على كل منها ووجهات النظر. وظيفة __autoload () لها وظيفة أبسط -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top