name = $name; } public function getName(): string { return $this->name; } // Phương thức trừu tượng bắt buộc lớp con phải định nghĩa lại abstract public function makeSound(): string; } interface CanRun { public function run(): string; } class Dog extends Animal implements CanRun { public function makeSound(): string { return "Gâu gâu! (Woof! Woof!)"; } public function run(): string { return "Chú chó {$this->name} đang chạy rất nhanh bằng 4 chân trên sân cỏ!"; } } class Cat extends Animal { public function makeSound(): string { return "Meo meo! (Meow! Meow!)"; } } $dogName = trim($_POST['dog_name'] ?? 'Milu'); $catName = trim($_POST['cat_name'] ?? 'Mimi'); $dog = new Dog($dogName ?: 'Milu'); $cat = new Cat($catName ?: 'Mimi'); $animals = [$dog, $cat]; ?>
Animal & Interface CanRunLớp trừu tượng Animal (makeSound()), lớp Dog, Cat và Interface CanRun (run())
= get_class($animal) ?>
extends Animal
makeSound():
= htmlspecialchars($animal->makeSound()) ?>
Interface CanRun:
implements CanRun
= htmlspecialchars($animal->run()) ?>
Không thực thi CanRun