Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أداة التحميل التلقائي Composer

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 13 من 91.

إن كتابة أداة التحميل التلقائي (autoloader) الخاصة بك تعمل، ولكن مشاريع PHP الحقيقية تستخدم Composer للتعامل مع التحميل التلقائي بشكل آلي. يقرأ Composer إعدادات مشروعك ويقوم بإنشاء أداة تحميل تلقائي محسنة تتبع معايير PSR-4.

يوجد التكوين في ملف composer.json في المجلد الرئيسي لمشروعك. إليك كيفية تحديد قواعد التحميل التلقائي (autoloading):

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

يخبر هذا Composer أن أي فئة تبدأ بـ App\ يجب تحميلها من المجلد src/. بعد إعداد ذلك، يقوم Composer بإنشاء ملفات التحميل التلقائي (autoloader) في مجلد vendor/.

لاستخدام أداة التحميل التلقائي (autoloader) الخاصة بـ Composer، تحتاج فقط إلى سطر واحد في الجزء العلوي من ملف الإدخال الخاص بك:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

تتعامل عبارة require الواحدة هذه مع كافة عمليات تحميل الفئات (class loading) لمشروعك بالكامل. يمكنك تحديد خرائط مساحات أسماء (namespace mappings) متعددة إذا لزم الأمر:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

نقطة رئيسية: يلغي محمل Composer التلقائي الحاجة إلى تضمين الملفات يدوياً ويضمن تحميلاً متسقاً للفئات عبر مشروعك. إنه النهج القياسي المستخدم من قبل جميع تطبيقات وأطر عمل PHP الحديثة تقريباً.

challenge icon

التحدي

سهل

لنقم ببناء تطبيق صغير يستخدم نهج التحميل التلقائي (autoloading) الخاص بـ Composer لتنظيم الفئات عبر ملفات متعددة. ستقوم بمحاكاة كيفية هيكلة مشروع PHP حقيقي لكوده باستخدام مساحات الأسماء PSR-4 ومحمل تلقائي مركزي.

ستقوم بإنشاء أربعة ملفات تعمل معاً:

  • src/Models/Product.php — قم بتعريف فئة Product في مساحة الاسم App\Models. يجب أن تحتوي على خصائص public $name و public $price، ومنشئ (constructor) يقبل ويضبط كلتا القيمتين، وتابع getInfo() يعيد "[name]: $[price]".
  • src/Models/Customer.php — قم بتعريف فئة Customer في مساحة الاسم App\Models. يجب أن تحتوي على خاصية public $name، ومنشئ يقبل ويضبط الاسم، وتابع greet() يعيد "Welcome, [name]!".
  • vendor/autoload.php — أنشئ محملاً تلقائياً بسيطاً باستخدام spl_autoload_register يحاكي سلوك Composer. يجب أن يربط بادئة مساحة الاسم App\ بمجلد src/، مع تحويل فواصل مساحة الاسم إلى فواصل مجلدات وإضافة .php لتحميل الملف الصحيح.
  • index.php — هذا هو ملف نقطة الدخول الخاص بك. اطلب المحمل التلقائي من vendor/autoload.php بسطر واحد، ثم استخدم الكلمة المفتاحية use لاستيراد كل من App\Models\Product و App\Models\Customer. أنشئ كائناً من Product باسم "Laptop" وسعر 999، وكائناً من Customer باسم "Alice". اطبع نتيجة استدعاء greet() على العميل و getInfo() على المنتج (كل منهما في سطر منفصل).

المفهوم الأساسي هنا هو أن ملف index.php الخاص بك يحتاج فقط إلى عبارة require واحدة لتحميل المحمل التلقائي — بعد ذلك، يتم تحميل جميع الفئات تلقائياً عند استخدامها. هذه هي بالضبط الطريقة التي تعمل بها أطر عمل وتطبيقات PHP الحديثة مع Composer.

ورقة مرجعية

يقوم Composer بأتمتة تحميل الفئات (class loading) من خلال قراءة ملف تكوين composer.json وإنشاء محمل تلقائي (autoloader) محسّن يتبع معايير PSR-4.

قم بتعريف قواعد التحميل التلقائي في composer.json:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

يقوم هذا بربط مساحة الاسم (namespace) App\ بمجلد src/. يقوم Composer بإنشاء ملفات المحمل التلقائي في مجلد vendor/.

استخدم المحمل التلقائي الخاص بـ Composer باستخدام عبارة require واحدة:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

قم بتعريف تعيينات متعددة لمساحات الأسماء إذا لزم الأمر:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

يغني المحمل التلقائي لـ Composer عن تضمين الملفات يدوياً وهو النهج القياسي في تطبيقات PHP الحديثة.

جرّب بنفسك

<?php
// TODO: استدعاء المحمل التلقائي (autoloader) من vendor/autoload.php

// TODO: استخدم الكلمة المفتاحية 'use' لاستيراد App\Models\Product

// TODO: استخدم الكلمة المفتاحية 'use' لاستيراد App\Models\Customer

// TODO: إنشاء منتج (Product) باسم "Laptop" وسعر 999

// TODO: إنشاء عميل (Customer) باسم "Alice"

// TODO: طباعة نتيجة الدالة greet() الخاصة بالعميل

// TODO: طباعة نتيجة الدالة getInfo() الخاصة بالمنتج
?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming