接口还是抽象类?
#初学者 #编程 #php

有时使用对象的工作可能很艰难,尤其是当您不知道需要使用哪种结构时。

例如,抽象类和界面都可以迫使其他类实现某些方法。

界面是“合同”

实现接口的类必须实现其方法。

例如,您可以确保旨在记录数据具有适当方法和行为的类。

这样,您可以安全地使用代码中的某些方法,因为类实现了定义所需行为的接口。

一词“合同”是否是描述接口的最佳词是另一个辩论。

这里的问题是要知道何时应该使用接口而不是抽象类,反之亦然。

仅方法签名?

接口和抽象类都可以包含使用它们的类必须实现的方法签名。

interface LoggingInterface
{
    public function warning($message, array $context = array()): void;
}

abstract class Logging
{
    abstract public function warning($message, array $context = array()): void;
}

这两个结构都不能实例化,必须实现(接口)或扩展(抽象类)。但是,接口不能具有属性和功能(〜与身体的方法)。

那有什么区别?

PHP类可以实现多个接口,但是不可能扩展多个类。

IMHO,这是了解何时应该使用接口或抽象类的关键。

如果您需要将一些功能(而不是抽象)和属性传递给一组类,则抽象类可能是有益的。如果您只想确保您的课程将实现特定的行为,请使用接口。

在上面的示例中,接口似乎更合适,这不仅是确保将使用特定签名实现warning()方法。

使用两个结构来改进您的代码

无论您使用接口还是抽象类,通常比经典延伸或大开关案例更好。

代码也应该更可读,因为您可以切割大量的if条件并防止不必要的重复。

当然,仍然可以编写不良代码,但是这些结构可以帮助您找到自己的路。

接口和抽象类非常相似,但是抽象类就像可以提供默认实现的对象的基本代码,因此扩展它们的类通常是相关的。

相比之下,接口专注于行为,可以分组无关的类。