【发布时间】:2016-10-08 01:09:47
【问题描述】:
为什么要在下面的例子中声明一个抽象方法,
<?php
abstract class ClassName
{
abstract public function methodName();
}
?>
什么时候
<?php
class ClassName
{
public function methodName()
{
// Body of method
}
}
?>
在被继承的子类操作时会提供相同的结果。
【问题讨论】:
-
en.wikipedia.org/wiki/Abstract_type#Use_of_abstract_types "抽象类型很有用,因为它们可用于定义和强制执行协议;所有实现协议的对象都必须支持的一组操作。"
-
好吧,它不会提供相同的结果。不会强制任何子类覆盖
methodName。要回答为什么,这完全由您自己决定。这就像问为什么存在 ENUM,它可以帮助您编写可维护的代码。 -
所以,继续 @ceejayoz 的引用 - 它可以帮助您保持代码更加干净和严格。
-
举个具体的例子:想象
abstract class CacheStore,打算用于Redis 存储、MySQL 存储、文件存储和AWS S3 存储。 Redis 存储永远不会想要继承 MySQL 存储的实现——它们是完全不同的。通过拥有一个抽象类,您可以说“任何缓存存储都将具有 get/put/expire/delete”等具有相同名称和签名的函数,但底层实现可能完全不同。
标签: php oop inheritance abstract abstraction