只有狗可以玩“抓”,这个例子是好还是坏主意?我怀疑这是一个非常糟糕的主意,由于使用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() . '
';
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;
}
}
本质上我认为我要问的是:“所有的子类都应该有相同的接口,还是可以有不同的接口?