محتويات الدورة

PHP / متوسط: الكائنات والحفظ والاختبار / الدرس 8

مساحات الأسماء والتحميل التلقائي وعقود Composer

افصل أسماء الأصناف من تحميل الملفات وحل الاعتماد. افهم خريطة PSR-4 وقصد الاعتمادات القابل للتكرار دون تثبيت حزم أو تشغيل تطبيق.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • حل الأسماء والأسماء البديلة عمداً.
  • شرح خرائط التحميل وحالة أحرف المسار.
  • تمييز التثبيت من تحديث الاعتماد.

تسمي مساحة الأسماء الرموز ولا تحدد الملفات

تنظم المساحات الأصناف والدوال والثوابت لتجنب التصادم. يقدم use اسماً بديلاً ولا يحمل ملفاً أو ينشئ كائناً. توضح الأسماء المؤهلة المقصود وتتبع غير المؤهلة قواعد تختلف بين الأصناف والدوال والثوابت. وضح الاستيراد واختر البديل لتصادم فعلي. لا يغير اسم المجلد تصريح المساحة ولا يسجل التصريح محملاً؛ فهما عقدان مختلفان.

اختبار التسمية دون محمل

يوضح ملف CLI واحد صنفاً ذا مساحة واسماً بديلاً دون Composer، فيعزل التسمية من اكتشاف الملف. يوضع الصنف عادة بملف مطابق لمساحته. لا يثبت المثال وجود محمل vendor أو قبول حالة أحرف خاطئة. اسأل أي مرحلة فشلت: الاسم أو التسجيل أو اختيار المسار أو التحميل أو وجود التصريح المتوقع.

php رمز بمساحة واسم بديل محلي
<?php
declare(strict_types=1);
namespace Training {
    final class Course { public function title(): string { return "PDO"; } }
}
namespace {
    use Training\Course as CourseRecord;
    echo (new CourseRecord())->title(), PHP_EOL;
}
الناتج المتوقع
PDO

الصنف مصرح في الملف نفسه؛ يغير use الكتابة المحلية لا الملفات أو المحمل.

PSR-4 خريطة لا اكتشاف سحري

يمكن أن يولد Composer محملاً من بادئات مساحات معلنة. تربط App\ بقية الاسم بمسار داخل مجلد وفق PSR-4. قد يمر اختلاف الأحرف بنظام ملفات ويفشل بآخر. يجب تضمين المحمل قبل الحاجة للصنف. لا تخفِ خريطة خاطئة بسلسلة require؛ افحص الاسم والمسار ثم أعد بيانات المحمل بإجراء المشروع عند التغيير.

قراءة بيانات الاعتماد كعقد

تصف composer.json القيود والتحميل وتسجل composer.lock مجموعة محلولة لتثبيت التطبيق. يختلف التثبيت من القفل عن تحديث مقصود. ومتطلبات PHP والامتداد توافق أيضاً. يفك المثال بيانات صغيرة فقط ولا يشغل Composer أو يجلب حزمة أو يثبت وجود ملف. تعامل مع البرامج والإضافات كاعتماد تنفيذي يحتاج سياسة ثقة لا إعداد بريء للتجربة.

php فحص خريطة بادئة PSR-4 كبيانات
<?php
declare(strict_types=1);
$prefix = "App" . chr(92);
$metadata = ["autoload" => ["psr-4" => [$prefix => "src/"]]];
$json = json_encode($metadata, JSON_THROW_ON_ERROR);
$decoded = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
echo $decoded["autoload"]["psr-4"][$prefix], PHP_EOL;
الناتج المتوقع
src/

يثبت المخرج المجلد المعلن فقط؛ فلا يولد محمل ولا يثبت اعتماداً.

إصلاح أول حد فاشل

افحص الاسم الكامل والتصريح والمسار وحالة الملف وتضمين المحمل عند غياب الصنف. وللاعتماد افحص القفل والإصدار والامتداد قراءةً قبل تعديل القيود. لا تصلح vendor يدوياً دائماً أو تنسخها كدليل تكرار غير مفسر. افصل اختبار اللغة من الحاوية ثم أضف فحص مدخل نظيفاً لتكامل المحمل بمعزل. احفظ أصغر فشل وبيئته.

الأخطاء الشائعة وإصلاحها

توقع تضمين ملف بواسطة use

لماذا يحدث؟
الخلط بين الاسم البديل والتحميل.
كيف تصلحه؟
تسجيل المحمل أو تضمينه منفصلاً.
كيف تتجنب تكراره؟
اختبار الاسم والمدخل مستقلين.

عمل الصنف محلياً وفشله بنظام ملفات آخر

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

تحديث الاعتماد لإصلاح خطأ اسم غير مرتبط

لماذا يحدث؟
استبدال التشخيص بتغيير اعتماد واسع.
كيف تصلحه؟
تحديد فشل الاسم والمسار قبل الاعتماد.
كيف تتجنب تكراره؟
فصل التثبيت وتوليد البيانات والتحديث المقصود.

اختبر فهمك

1. يفترض ربط App\Course تحت src/. ما حقائق تقرير غياب الصنف؟

اعرض الحل المشروح

اذكر الاسم والتصريح والملف المتوقع وحالته وتضمين المحمل. أضف البيئة والقفل للاعتماد. لا يثبت استيراد المحرر اكتشاف الملف وقت التنفيذ.

2. لماذا يحتفظ التطبيق بـcomposer.lock؟

اعرض الحل المشروح

يسجل الحل المختار لتكراره بدلاً من اختيار مجموعة كل مرة. لا يلغي متطلبات البيئة والامتدادات. يجب قصد التحديث واختباره لا استعماله لخطأ تهجئة.

أهم ما تعلمته

  • حل المساحة وخريطة التحميل وتثبيت الاعتماد أمور منفصلة.
  • يشمل التكرار الشيفرة المقفلة وقدرات البيئة.

المراجع الرسمية