0Pricing
PHP Academy · درس

المنشئات والمدمّرات

هيّئوا الكائنات باستخدام __construct ونظّفوا الموارد باستخدام __destruct

المنشئات والمدمّرات درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

مقدمة: الدوال البانية والهادمة

تُنفَّذ الدالة __construct() تلقائيًا عند إنشاء كائن جديد. وتُنفَّذ الدالة __destruct() عند تجميع الكائن بواسطة جامع القمامة. قدّم PHP 8 ترقية خصائص الباني.

المفاهيم الأساسية

المفاهيم الأساسية للدوال البانية والهادمة:

  • تُهيّئ __construct() الكائن
  • تقلّل ترقية خصائص الباني من طول الشيفرة
  • تُستخدم __destruct() للتنظيف (مقابض الملفات والاتصالات)
  • يُستدعى الباني الأصلي باستخدام parent::__construct()

الباني الأساسي

مثال:

<?php
class User {
    public string $name;
    public string $email;

    public function __construct(string $name, string $email) {
        $this->name  = $name;
        $this->email = $email;
    }
}

$user = new User('Alice', 'alice@example.com');
echo $user->name; // Alice

ترقية خصائص الباني (PHP 8)

متابعة:

<?php
class User {
    // Shorthand: declare and assign in one go
    public function __construct(
        public readonly string $name,
        public readonly string $email,
        private int $loginCount = 0,
    ) {}
}

$u = new User('Bob', 'bob@test.com');
echo $u->name;  // Bob

التحقق في الباني

تدريب:

<?php
class PositiveInt {
    public function __construct(private int $value) {
        if ($value <= 0) {
            throw new InvalidArgumentException(
                "Value must be positive, got $value"
            );
        }
    }
    public function get(): int { return $this->value; }
}

$n = new PositiveInt(5);  // OK
// new PositiveInt(-1);   // throws

الدالة الهادمة

مزيد من التعمق:

<?php
class FileLogger {
    private mixed $handle;

    public function __construct(string $path) {
        $this->handle = fopen($path, 'a');
    }

    public function log(string $msg): void {
        fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
    }

    public function __destruct() {
        if ($this->handle) fclose($this->handle);
        echo 'File handle released';
    }
}

نمط الباني المُسمّى

استخدام متقدم:

<?php
class Money {
    private function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public static function usd(float $a): self { return new self($a, 'USD'); }
    public static function eur(float $a): self { return new self($a, 'EUR'); }

    public function format(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

echo Money::usd(9.99)->format(); // 9.99 USD

الباني الأصلي

نمط عملي واقعي:

<?php
class Animal {
    public function __construct(
        protected string $name,
        protected string $sound
    ) {}
}

class Dog extends Animal {
    public function __construct(string $name) {
        parent::__construct($name, 'Woof');
    }
    public function speak(): string {
        return "{$this->name} says {$this->sound}!";
    }
}

echo (new Dog('Rex'))->speak();  // Rex says Woof!

الربط الساكن المتأخر في البناة

أفضل الممارسات:

<?php
class Base {
    public static function create(): static {
        return new static();  // 'static' resolves to calling class
    }
}

class Child extends Base {}

$base  = Base::create();   // Base object
$child = Child::create();  // Child object — static binding works

نمط عملي

جمع كل ذلك في نمط عملي للدوال البانية والهادمة.

أخطاء شائعة

تجنبوا هذه الأخطاء الشائعة عند استخدام الدوال البانية والهادمة:

  • استدعوا دائمًا parent::__construct() عند تمديد صنف
  • استخدموا ترقية خصائص الباني في PHP 8+ لتقليل الشيفرة النمطية
  • لا يُضمن تشغيل الدالة الهادمة في وقت محدد
  • فضّلوا البناة المُسمّين على التحميل الزائد المتعدد للدالة __construct()

تحقق سريع

ما المقصود بترقية خصائص الباني في PHP 8؟

مراجعة: الدوال البانية والهادمة

لقد تعلّمتم الدوال البانية والهادمة. تذكّروا النقاط الأساسية التالية:

  • استدعوا دائمًا parent::__construct() عند تمديد صنف
  • استخدموا ترقية خصائص الباني في PHP 8+ لتقليل الشيفرة النمطية
  • لا يُضمن تشغيل الدالة الهادمة في وقت محدد
  • فضّلوا البناة المُسمّين على التحميل الزائد المتعدد للدالة __construct()

الأسئلة الشائعة

هل درس «المنشئات والمدمّرات» مجاني؟

نعم — نص درس «المنشئات والمدمّرات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «المنشئات والمدمّرات»؟

هيّئوا الكائنات باستخدام __construct ونظّفوا الموارد باستخدام __destruct تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «المنشئات والمدمّرات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الفئات والخصائص والأساليب
  2. المنشئات والمدمّرات
  3. الخصائص والأساليب الساكنة
  4. نظرة عامة على الأساليب السحرية
← العودة إلى PHP Academy