PHP شیءگرا
·
۱۰ دقیقه مطالعه
وراثت، abstract و interface
وراثت
class Content {
public function __construct(public string $title) {}
public function show(): string { return $this->title; }
}
class Lesson extends Content {
public function __construct(string $title, public int $minutes) {
parent::__construct($title);
}
public function show(): string {
return parent::show() . " ({$this->minutes} دقیقه)";
}
}
extends ارثبری، parent:: دسترسی به والد، و بازنویسی (override) متد.
کلاس abstract
قالبی که مستقیم نمونه نمیگیرد:
abstract class Exercise {
abstract public function check(string $answer): bool;
}
class Quiz extends Exercise {
public function check(string $answer): bool { return $answer === "ok"; }
}
هر فرزند باید متد abstract را پیاده کند.
interface — قرارداد
interface Runner {
public function run(string $code): string;
}
class PhpRunner implements Runner {
public function run(string $code): string { return "اجرا"; }
}
کلاس میتواند چند interface را پیاده کند. کدی که به interface وابسته است، به پیادهسازی خاص گره نمیخورد — اصل «وابستگی به انتزاع».