3

I have been programming PHP for half year now, I am into Object-Oriented for 3 months. But I have never used Abstracted class or a Interface.

One of my mates explained, but in Java:

If you want to give a certain class a structure, like implementing an interface as Entity, all underlying classes must inherit the methods from the interface and give it a body.

But I still don't understand, in PHP. I can't find any moment to use the Interface.

When do people usually find Interfaces useful? Are they useful? Or I can live without them? Can you show me a perfect example of a right moment to use a interface?

I've read in the Documentation, but didn't understand either.

Another question:

If I want to use different files for interfaces, for example:

Body.interface.php

To use that interface in the specific class, do I have to use include(), right?

4

3 回答 3

1

接口是针对您的课程的一组指令。实现接口时,继承类必须遵循接口定义的规则。

接口包括您继承的类必须具有的所有方法和属性的列表、它们的参数、类型和任何 PHP 文档。它们有两个主要目的:为扩展父类的开发人员提供一组说明,以及为扩展类提供一组规则。

一个很好的使用场景是,如果您创建的类将来会被其他类访问或扩展。就我而言,我在创建 API 时经常使用接口,例如 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)
于 2013-06-17T20:51:22.750 回答
0

接口旨在帮助您指定不适合类继承树但应该可以使用特定方法调用的行为。把它想象成一种能力。

如果你能数出一些东西,它就是可数的,你可以实现Countable接口。其中一些东西也可以排序,它们是可排序的。您可以为此定义自己的接口,并强制执行升序和降序排序的方法。

接口没有任何方法的实现,您必须在实现类中执行此操作。

您需要以与包含(抽象)类相同的方式包含接口。最简单的方法是使用自动加载器,让 php 在需要时加载类和接口。

于 2013-06-17T21:00:01.270 回答
0
  • 接口与问题相同,当接口被创建并用类实现时,类必须使用接口的所有方法。接口很短,意味着方法被声明为未定义。该类可以使用外部(自己的)方法。
  • 接口可扩展
  • 所有方法都必须在接口中公开
  • 如果您是 Bose 并且您想告诉您的客户使用此方法或各种类型的方法,则接口很有用,只需编写或创建接口,然后让您的客户在他们的类中实现

要在类中包含接口,您必须创建一个接口;

 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
}
}
于 2013-06-17T20:53:32.533 回答