一般多态性与 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();
}
另一个例子。由于我不断创建具有 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;
}
}
从本质上讲,我认为我要问的是:“所有子类都应该具有相同的接口,还是可以有不同的接口?