🐘 شرح PHP

OOP المتقدّمة

الوراثة (Inheritance)

صنف يرث خصائص ودوال صنف آخر بـ extends:

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

    public function eat(): string {
        return "{$this->name} يأكل";
    }
}

class Dog extends Animal {
    public function bark(): string {
        return "{$this->name} ينبح";
    }
}

$d = new Dog("ريكس");
echo $d->eat();    // موروثة
echo $d->bark();   // خاصة
?>

استدعاء الأب بـ parent:::

<?php
class Manager extends Employee {
    public function __construct(string $name, public int $teamSize) {
        parent::__construct($name);
    }
}
?>

الأصناف المجرّدة (Abstract)

قالب لا يُنشأ منه كائن مباشرة، يفرض على الوارثين تطبيق دوال معيّنة:

<?php
abstract class Shape {
    abstract public function area(): float;   // بلا جسم
}

class Square extends Shape {
    public function __construct(public float $side) {}

    public function area(): float {
        return $this->side ** 2;
    }
}

echo (new Square(5))->area();   // 25
?>

الواجهات (Interfaces)

عقد يحدّد دوالًا يجب على الصنف تطبيقها — دون تنفيذ:

<?php
interface Drivable {
    public function start(): void;
    public function stop(): void;
}

class Car implements Drivable {
    public function start(): void { echo "انطلق"; }
    public function stop(): void { echo "توقّف"; }
}
?>

صنف يرث من أب واحد فقط، لكنه يطبّق عدّة واجهات.

الـ Traits

لإعادة استخدام دوال عبر أصناف غير مترابطة (يحلّ غياب الوراثة المتعدّدة):

<?php
trait Loggable {
    public function log(string $msg): void {
        echo "[" . static::class . "] $msg";
    }
}

class User {
    use Loggable;
}

(new User())->log("تمّ الإنشاء");
?>

الأعضاء الساكنة (static)

تنتمي للصنف نفسه لا لكائن — نصل إليها بـ :::

<?php
class Counter {
    public static int $count = 0;

    public static function increment(): void {
        self::$count++;
    }
}

Counter::increment();
Counter::increment();
echo Counter::$count;   // 2
?>

أخطاء شائعة

  • محاولة إنشاء كائن من صنف مجرّد (new Shape()) — غير مسموح.
  • الخلط بين -> (لأعضاء الكائن) و:: (للأعضاء الساكنة والثوابت).

🎯 التالي: المساحات الاسمية وقواعد البيانات.