Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 能否应用Liskov替换原理(php示例)?_Oop_Solid Principles - Fatal编程技术网

Oop 能否应用Liskov替换原理(php示例)?

Oop 能否应用Liskov替换原理(php示例)?,oop,solid-principles,Oop,Solid Principles,“子类型必须可替换为其基类型” 假设我已经有了一门鸟类课程,并且: class Parrot extends Bird { public function Talk() { echo 'Talk'; } } 鸟不会说话,所以我不能用鸟来代替鹦鹉 这只是一个基本示例,但通常扩展类可以做的比基类多得多。我遗漏了什么?关键是鹦鹉在所有方面都应该表现得像鸟一样,这样有计划对付鸟类的人就不会对他们遇到的鹦鹉感到惊讶。如果鹦鹉碰巧也会说话,那没关系,因为他们的计划不包括让鸟儿说话 例

“子类型必须可替换为其基类型”

假设我已经有了一门鸟类课程,并且:

class Parrot extends Bird {
   public function Talk() {
     echo 'Talk';
   }
}
鸟不会说话,所以我不能用鸟来代替鹦鹉


这只是一个基本示例,但通常扩展类可以做的比基类多得多。我遗漏了什么?

关键是鹦鹉在所有方面都应该表现得像鸟一样,这样有计划对付鸟类的人就不会对他们遇到的鹦鹉感到惊讶。如果鹦鹉碰巧也会说话,那没关系,因为他们的计划不包括让鸟儿说话

例如,也许他们只是对每一只鸟都调用
$bird->fly()
——鹦鹉的说话能力不会干扰这种活动,所以他们的算法仍然有效。但是如果你发明了一种不会飞的鸟(比如鸵鸟),那么你就违反了这个原则,他们的通用鸟类处理算法不再适用于所有种类的鸟类