Pimple PHP: دليل شامل مع أمثلة عملية لحقن التبعيات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Pimple PHP: دليل شامل لحاوية حقن التبعيات البسيطة

1. ما هو Pimple ولماذا تحتاجه؟

Pimple هي حاوية خفيفة الوزن لحقن التبعيات (Dependency Injection Container) مكتوبة بلغة PHP، طورها Fabien Potencier، مبتكر إطار العمل Symfony. على عكس الحاويات الضخمة، تقدم Pimple حلاً بسيطاً يمكن دمجه في أي مشروع دون أي تكلفة إضافية. تطبق المكتبة نمط Service Locator وتوفر واجهة برمجة تطبيقات (API) سهلة لإدارة الكائنات وتبعياتها.

المهمة الأساسية لـ Pimple هي تبسيط إدارة التبعيات في تطبيقات PHP. بدلاً من إنشاء الكائنات يدوياً باستخدام new وتمريرها إلى الدوال البانية، تقوم بتسجيل الخدمات في الحاوية ثم طلبها بالاسم. تقوم الحاوية تلقائياً بحل التبعيات، وإنشاء الكائنات مرة واحدة (singleton) أو في كل مرة (factory)، وإدارة دورة حياتها. هذا يجعل الكود أكثر نمطية، وقابلية للاختبار، وسهولة في الصيانة.

Pimple مثالية للمشاريع الصغيرة والمتوسطة التي لا تحتاج إلى الوظائف الكاملة لـ Symfony DI أو PHP-DI. لا تستخدم التعليقات التوضيحية (annotations)، ولا تتطلب إعدادات معقدة، وتعمل بدءاً من PHP 5.3. تُستخدم المكتبة بنشاط في Silex (إطار عمل مصغر) ومشاريع PHP أخرى حيث البساطة والسرعة هما الأهم.

2. التثبيت

يتم تثبيت Pimple عبر Composer، مدير الحزم القياسي لـ PHP. قم بتنفيذ الأمر التالي في الطرفية:

composer require pimple/pimple

بعد التثبيت، قم بتضمين أداة التحميل التلقائي (autoloader) الخاصة بـ Composer في ملف PHP الخاص بك:

require_once __DIR__ . '/vendor/autoload.php';

إذا لم يكن لديك ملف composer.json بعد، قم بإنشائه:

{
    "require": {
        "pimple/pimple": "^3.5"
    }
}

3. البداية السريعة — مثال عملي بسيط

قم بإنشاء ملف index.php وأضف الكود التالي:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Pimple\Container;

// إنشاء الحاوية
$container = new Container();

// تعريف خدمة بسيطة (دالة مجهولة)
$container['greeting'] = function ($c) {
    return 'مرحباً بالعالم!';
};

// تعريف خدمة مع معامل
$container['personal_greeting'] = function ($c) {
    return function ($name) use ($c) {
        return 'مرحباً، ' . $name . '!';
    };
};

// الحصول على الخدمات
echo $container['greeting'] . "\n"; // مرحباً بالعالم!
echo $container['personal_greeting']('أحمد') . "\n"; // مرحباً، أحمد!

// تعريف خدمة ككائن
class Logger {
    public function log($message) {
        echo "[سجل] $message\n";
    }
}

$container['logger'] = function ($c) {
    return new Logger();
};

$container['logger']->log('تم بدء التطبيق');

قم بتشغيل السكريبت: php index.php. سترى إخراج ثلاث رسائل. يوضح هذا المثال التسجيل الأساسي والحصول على الخدمات من الحاوية.

4. الدوال والفئات الأساسية

4.1. Pimple\Container::__construct()

التوقيع: public function __construct(array $values = [])

الوصف: ينشئ مثيلاً جديداً للحاوية. يمكن تمرير مصفوفة من القيم/الخدمات المحددة مسبقاً.

$container = new Container([
    'db.host' => 'localhost',
    'db.name' => 'test'
]);

4.2. offsetSet($id, $value) (طريقة سحرية عبر [])

التوقيع: public function offsetSet($id, $value): void

توصيات