我为什么要在PHP中创建接口?

时间:2010-11-13 19:20:52

标签: php

  

可能重复:
  What is the point of interfaces in PHP?

我为什么要用PHP创建接口?

据我所知,接口用于描述实现它们的类。这些类必须至少包含这些函数。如果您在其他人的工作基础上建立,或者必须保持一定程度的兼容性,这一切都很好。但在更简单的情况下?

我知道,对于编译的编程语言,比如C ++,接口的使用可以提高编译速度,但是PHP呢?这种优势似乎消失了,因为PHP是被解释的,而不是被编译的。

4 个答案:

答案 0 :(得分:1)

接口是一种“模拟”多重继承的方式。 PHP中的类只能扩展一个父类,但可以实现任意数量的接口,从而允许您创建具有许多不同类型的对象。

答案 1 :(得分:1)

接口用于扩展/模拟核心PHP行为,如迭代器,数组访问等。这是接口为您提供的主要功能......也就是说,您不能以任何其他方式执行此操作。

您还可以使用接口来强制执行参数检查:

function foo(MyInterface $obj)
{
}

虽然没有您使用其他语言(例如C ++)获得的编译时检查有用,但运行时检查在最大限度地减少错误方面仍然非常有用。

最后,接口可以使用is_a函数或instanceof运算符简化某些逻辑。您可以检查“抽象”对象是否实现某个接口,然后相应地执行某些操作。

答案 2 :(得分:1)

也许现实世界的例子将有助于说明这一点。想象一下,您需要构建一系列日志记录类,将消息记录到各种媒体,如文本文件,XML或数据库。当然,每个类都需要有单独的代码来与不同类型的存储进行交互。但是,如果它们都实现相同的界面,那么它们向其他代码显示的“公共面孔”始终是相同的。这样,使用日志记录对象的其他代码不需要知道它们是实例的类或存储介质是什么。他们需要知道的是,所有日志记录类由于它们都实现相同的接口而共享一个公共API。这可以是一种非常强大的工作方式。您可以构建一个代码库,以不同的方式解决相关问题,并在代码中“即插即用”这些代码。

答案 3 :(得分:0)

接口的使用与速度无关,永远不会。 但它与解耦和抽象化有很大关系。

您将在PHP中使用它们:

  1. 隐藏实现 - 为一类对象建立访问协议,更改底层实现,而不在您使用该对象的所有位置进行重构
  2. 检查类型 - 与确保参数具有特定类型$object instanceof MyInterface
  3. 一样
  4. 要在运行时强制执行参数检查 - 请参阅@konforce answer
  5. 将多个行为实现到单个类中(构建复杂类型)
      

    类Car实现EngineInterface,BodyInterface,SteeringInterface {

  6.   

    以便Car对象现在可以start()stop()(EngineInterface)或goRight()goLeft()(转向界面)

    以及其他我现在无法想到的事情

    来自Java思考:

      

    一个接口说,“这就是所有实现这个特定接口的类都会是这样的。”因此,任何使用特定接口的代码都知道可以为该接口调用哪些方法,而这就是全部。因此,该接口用于在类之间建立“协议”。