可能重复:
What is the point of interfaces in PHP?我为什么要在PHP中创建接口?
我为什么要创建PHP接口?
据我所知,接口在那里描述实现它们的类。类必须至少包含这些函数。如果你正在构建别人的工作,或者必须保持一定程度的兼容性,这一切都很好。但是在更简单的情况下?
我知道,对于编译的编程语言,如C++,接口的使用可以提高编译速度,但PHP呢?这个好处似乎消失了,因为PHP被解释,而不是编译。
可能重复:
What is the point of interfaces in PHP?我为什么要在PHP中创建接口?
我为什么要创建PHP接口?
据我所知,接口在那里描述实现它们的类。类必须至少包含这些函数。如果你正在构建别人的工作,或者必须保持一定程度的兼容性,这一切都很好。但是在更简单的情况下?
我知道,对于编译的编程语言,如C++,接口的使用可以提高编译速度,但PHP呢?这个好处似乎消失了,因为PHP被解释,而不是编译。
也许现实世界的例子将有助于说明这一点。想象一下,您需要构建一系列记录类,将消息记录到各种媒体,如文本文件,XML或数据库。当然,每个类都需要有独立的代码来与不同类型的存储进行交互。但是,如果他们都实现相同的接口,那么他们向其他代码显示的“公共面孔”总是相同的。这样,使用日志对象的其他代码就不需要知道它们是什么类,它们是存储介质的实例还是什么。他们需要知道的一切就是所有的日志记录类,由于它们都实现了相同的接口,所以共享一个通用的API。这可能是一种非常强大的工作方式。您可以建立一个代码库,以不同的方式解决相关问题,只需在代码中“即插即用”即可。
谢谢!这对我来说更加清晰。虽然其他答案包含很多额外的信息,但这让我感到困惑。 – 2010-11-13 20:27:23
接口是一种“模拟”多重继承的方式。 PHP中的类只能扩展一个父类,但可以实现任意数量的接口,从而允许创建具有多种不同类型的对象。
接口用于扩展/模拟核心PHP行为,如迭代器,数组访问等。这是接口给你的主要东西......也就是说,你不能以任何其他方式进行。
您还可以使用接口来执行参数检查:
function foo(MyInterface $obj)
{
}
虽然作为编译时检查,你会得到另一种语言而不是有用的(例如,C++),运行时检查仍然很有助于最大限度地减少错误。
最后,通过使用is_a
函数或instanceof
运算符,接口可以简化某些逻辑。你可以检查“抽象”对象是否实现了某个接口,然后做相应的处理。
您的回答不正确。仿真/扩展核心PHP行为?接口用于在子类中实施标准API。如果正确实施,您可以切换出不同的类,并且不会有任何不兼容性。 – 2010-11-13 23:06:42
要么你是无知的,或只是迂腐。例如,如果您希望您的对象通过'[]'数组语法来模拟(扩展,模仿,作为任何您喜欢的)数组,则必须实现ArrayAccess接口。没有其他办法可以做到这一点。还有许多其他内置接口提供了核心PHP功能。 – Matthew 2010-11-14 00:44:59
接口的使用与速度无关,永远不会。 但它与解耦和抽象有很大关系。
您将在PHP中使用它们:
$object instanceof MyInterface
类汽车实现EngineInterface,BodyInterface,SteeringInterface {
使得Car
对象CA现在start()
,stop()
(EngineInterface)或goRight()
,goLeft()
(转向接口)
和其他我现在无法想象的东西
来自Java中的思考:
一个接口说:“这就是所有实现这个特定接口的类都是这样的。”因此,任何使用特定接口的代码都知道可能为该接口调用哪些方法,就这些。所以这个接口被用来在类之间建立一个“协议”。
我曾经这样想过,但实际上PHP被编译为字节码。当你执行脚本时,首先发生的事情是编译。这就是为什么你可以使用像APC这样的字节码缓存。 – JAL 2010-11-13 19:27:49
接口用于代替多重继承。在PHP中,他们也可以在对象上提供一些语法特征,参见SPL类或ArrayAccces。 – mario 2010-11-13 19:30:35
[PHP中的接口是什么?]的副本(http://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php) – Gordon 2010-11-14 00:05:35