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

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

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

ابدأ الدورة

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



حقن التبعية (DI) هو أحد أنماط التصميم الرئيسية في البرمجة كائنية التوجه، والذي يسمح بإنشاء تطبيقات ضعيفة الاقتران، قابلة للاختبار وسهلة الصيانة. في PHP، يتم تنفيذ هذا الأسلوب باستخدام أدوات خاصة — حاويات حقن التبعية (المعروفة أيضًا بحاويات حقن التبعيات). في هذه المقالة، سنشرح بالتفصيل ما هي حاوية DI، وكيف تعمل، ونستعرض أفضل المكتبات لـ PHP.



ما هو حقن التبعية؟



حقن التبعية هو أسلوب يحصل فيه الكائن على تبعياته من الخارج، بدلاً من إنشائها بنفسه. بدلاً من كتابة new Database() داخل الفئة، تقوم بتمرير كائن جاهز عبر المُنشئ، أو المُحدد، أو الواجهة. وهذا يجعل الكود أكثر مرونة ويبسط عملية الاختبار.



مثال بدون DI:

class UserService {    private $db;

public function __construct() { $this->db = new Database(); // ارتباط صلب }}


مثال مع DI عبر المُنشئ:

class UserService {    private $db;

public function __construct(Database $db) { $this->db = $db; // التبعية تُمرر من الخارج }}


لماذا نحتاج إلى حاوية DI؟



عندما يصبح في المشروع العديد من الفئات والتبعيات، يتحول الإنشاء اليدوي للكائنات وتمرير التبعيات إلى صداع. حاوية DI تقوم بأتمتة هذه العملية. تعمل كسجل مركزي يعرف كيفية إنشاء الكائنات وحل تبعياتها.



الإمكانيات الرئيسية لحاوية DI:

  • الحل التلقائي للتبعيات — الحاوية تجد وتُدخل الكائنات المطلوبة بنفسها.
  • إدارة دورة حياة الكائنات — يمكنك ضبط ما إذا كان سيتم إنشاء مثيل جديد في كل مرة أو استخدام مثيل واحد (Singleton).
  • التكوين عبر الكود أو الملفات — يمكن وصف التبعيات في PHP، YAML، XML أو التعليقات التوضيحية.
  • دعم الواجهات والتجريدات — يمكن للحاوية ربط واجهة بتنفيذ محدد.


حاويات DI الشائعة لـ PHP



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



1. PHP-DI (حقن التبعية لـ PHP)

واحدة من أقوى وأسهل الحاويات استخدامًا. تدعم التعبئة التلقائية (Autowiring)، التعليقات التوضيحية، التكوين عبر مصفوفات PHP و YAML. مناسبة تمامًا للتطبيقات الحديثة.



مثال على استخدام PHP-DI:

use DI\\ContainerBuilder;

$builder = new ContainerBuilder();$builder->addDefinitions([ 'db.host' => 'localhost', Database::class => DI\\create() ->constructor(DI\\get('db.host')),]);

$container = $builder->build();$db = $container->get(Database::class);


2. Symfony DependencyInjection

مكون من إطار العمل Symfony، يمكن استخدامه بشكل منفصل. يوفر تكوينًا مرنًا عبر YAML، XML أو PHP. مثالي للمشاريع الكبيرة على مستوى المؤسسات.



مثال على التكوين في YAML:

services:    App\\Service\\UserService:        arguments:            - '@App\\Repository\\UserRepository'            - '@logger'


3. Laravel Service Container

الحاوية المدمجة في إطار العمل Laravel. تدعم التعبئة التلقائية، ربط الواجهات بالتنفيذات، الربط السياقي والعديد من الوظائف الأخرى. تُستخدم افتراضيًا في Laravel.



مثال على ربط واجهة:

use App\\Contracts\\PaymentGateway;use App\\Services\\StripePayment;

$this->app->bind(PaymentGateway::class, StripePayment::class);


4. Pimple

حاوية DI خفيفة الوزن، أنشأها مبتكر Symfony. مناسبة للمشاريع الصغيرة والمتوسطة.

توصيات