Как только собаки могут играть "извлечения", является ли этот пример хорошей или плохой идеей? Я подозреваю, что это действительно плохая идея из-за использования instanceof, но я не совсем уверен, почему.
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();
}
Другой пример. Поскольку я постоянно создаю объекты данных, у которых есть ID, я решил, что я мог бы также расширить их все из базового класса, чтобы избежать дублирования кода. Опять же, это было плохо? Поскольку у председателя нет имени, а у собаки нет колес. Но они являются обоими объектами данных, поэтому они очень запутывают.
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;
}
}
По сути, я думаю, что я спрашиваю: "должны ли все подклассы иметь один и тот же интерфейс или могут иметь разные?"