2017-02-11 58 views
-1

这里是我的另一篇文章采取代码: Is what seems like polymorphism in PHP really polymorphism?多态只是覆盖继承类的函数吗?

class Animal { 
    var $name; 
    function __construct($name) { 
     $this->name = $name; 
    } 
} 

class Dog extends Animal { 
    function speak() { 
     return "Woof, woof!"; 
    } 
} 

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>'; 
} 
+0

这里有个问题吗? –

+0

问题是,这个陈述是真实的吗? 我可以看到在这里发生的是,我们为同一个名称分配两个函数到不同的类, 是否有一个或两个句子的多态性解释 –

+0

您可以使用[traits](http://php.net/manual /en/language.oop5.traits.php)用于PHP中的多态。 – x01saa

回答

1

多态性是指刺激的发送者并不需要知道 接收实例的类。接收实例可以登录到 任意一个类。

Object-Oriented Software Engineering: A Use Case Driven Approach, 第55页)

在这种情况下,发件人是调用$animal->name$animal->speak() print语句。对象实例可以是任意类,它实现了属性name和方法speak,而整个事情仍然有效。因此,通过这个定义,多态性。

否则,你是什么意思的多态性? (不同的人可能对同一个词有不同的理解)

+0

AFAIK,polymoprhism有一个单一的含义,我不知道你的是否正确... –

+0

只是引用一本书。不是我的。你知道的定义是什么? –

+0

如果我没有弄错,多态是给定类提供一组函数/方法的能力,并让其专业化重新定义它们的实现。 –