我已经编程PHP半年了,我进入面向对象3个月。
但我从未使用过抽象类或Interface
。
我的一位同事解释说,但是用Java:
如果要为某个类提供一个结构,比如将接口实现为Entity,则所有底层类必须从接口继承方法并为其提供一个主体。
但我仍然不明白,在PHP中。我找不到任何使用界面的时刻。
人们通常会发现Interfaces有用吗?它们有用吗?或者我可以没有它们生活? 你能告诉我一个使用界面的合适时机的完美例子吗?
我在文档中读过,但也不明白。
另一个问题:
如果我想为接口使用不同的文件,例如:
Body.interface.php
要在特定类中使用该接口,我是否必须使用include(),对吧?
答案 0 :(得分:1)
接口是您班级的一组说明。实现接口时,继承类必须遵循接口定义的规则。
接口包括您继承的类必须具有的所有方法和属性的列表,它们的参数,类型和任何PHP文档。它们有两个关键目的:为扩展父类的开发人员提供一组指令,并为扩展类提供一组规则。
一个很好的使用场景是你创建一个将来由其他类访问或扩展的类。在我的例子中,我经常在创建API时使用Interfaces,比如Restful或SOAP API。基类是具体的,包含一些重要的必需工具,因此界面告诉我的其他开发人员如何与父类交互。
接口的有效使用
interface MyInterface {
/**
* This method is required in your inheriting class
* @var \stdClass $MyRequiredParameter - A object of options
*/
public function myRequiredMethod(stdClass $MyRequiredParameter);
}
class MyClass implements MyInterface {
public function myRequiredMethod(\stdClass $MyRequiredParameter)
{
return $MyRequiredParameter->MyValue;
}
}
class MyExtension extends MyClass implements MyInterface {
public function myRequiredMethod(\stdClass $MyRequiredParameter)
{
return $MyRequiredParameter->MyOtherValue;
}
}
接口类的无效扩展示例
class MyBadExtension implements MyInterface {
public function weDontNeedNoStinkingRequiredMethods()
{
return FALSE;
}
}
由于我们没有遵循接口的模式,因此我们会产生一个致命的异常:
Fatal error: Class MyBadExtension contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (MyInterface::myRequiredMethod)
答案 1 :(得分:0)
在类中包含接口,你必须创建一个接口;
interface interface_name{
public function submodule1();
public function submodule2();
}
现在在课堂上实施或应用
class class_name implements interface_name{
public function submodule1()
{
//some code
}
public function submodule2()
{
//some code
}
}
答案 2 :(得分:0)
接口旨在帮助您指定不适合类继承树但应使用特定方法调用可用的行为。把它想象成一种能力。
如果你可以计算一些东西,它是可数的,你可以实现Countable界面。其中一些东西也可以分类,它们是可排序的。您可以为此定义自己的界面,并强制进行升序和降序排序。
接口没有任何方法的实现,您必须在实现类中执行此操作。
您需要以包含(抽象)类的方式包含接口。最简单的方法是使用自动加载器并让PHP在需要时加载类和接口。