Vì chỉ có Chó mới có thể chơi "tìm nạp", ví dụ này là một ý tưởng hay hay? Tôi nghi ngờ đó là một ý tưởng thực sự tồi do việc sử dụng instanceof, nhưng tôi không hoàn toàn chắc chắn lý do tại sao.Tính đa hình chung với các ví dụ PHP
class Animal {
var $name;
function __construct($name) {
$this->name = $name;
}
}
class Dog extends Animal {
function speak() {
return "Woof, woof!";
}
function playFetch() {
return 'getting the stick';
}
}
class Cat extends Animal {
function speak() {
return "Meow...";
}
}
$animals = array(new Dog('Skip'), new Cat('Snowball'));
foreach($animals as $animal) {
print $animal->name . " says: " . $animal->speak() . '<br>';
if ($animal instanceof Dog) echo $animal->playFetch();
}
Ví dụ khác. Khi tôi liên tục tạo các đối tượng dữ liệu có ID, tôi đã tìm ra rằng tôi có thể mở rộng tất cả chúng từ một lớp cơ sở để tránh trùng lặp mã. Một lần nữa, điều này là xấu phải không? Như một chiếc ghế không có tên và một con chó không có bánh xe. Nhưng chúng là cả hai đối tượng dữ liệu nên rất khó hiểu.
class Data_Object {
protected $_id;
function setId($id) {
$this->_id = $id;
}
function getId() {
return $this->_id;
}
}
class Dog extends Data_Object {
protected $_name;
function setName($name) {
$this->_name =
}
function getName() {
return $this->_name;
}
}
class Chair extends Data_Object {
protected $_numberOfWheels;
function setNumberOfWheels($number) {
$this->_numberOfWheels = $number;
}
function getNumberOfWheels() {
return $this->_numberOfWheels;
}
}
Về cơ bản những gì tôi nghĩ tôi hỏi là: "nên tất cả các lớp con có cùng một giao diện hoặc họ có thể có những người khác nhau?"
Khá chắc chắn điều này đã được yêu cầu ở đây trước, nhưng câu trả lời ngắn gọn là nó bật đèn xanh cho các lớp con để có một giao diện khác nhau. – NullUserException
Tôi khá chắc chắn ví dụ đầu tiên là không đúng do việc sử dụng instanceof cho logic điều kiện. Không phải toàn bộ điểm của Đa hình không làm điều này sao? – Dan
Tại sao bạn muốn để có được tất cả các loài động vật để làm một cái gì đó (nói chuyện), ngoại trừ một loại (Dog)? Âm thanh như logic bị lỗi nằm trong vòng lặp, không phải là định nghĩa lớp. – NullUserException