【问题标题】:PHP:Concept of interfaces? [duplicate]PHP:接口的概念? [复制]
【发布时间】:2013-10-18 05:26:17
【问题描述】:

谁能用很好的例子来解释接口的概念。我搜索但没有找到一个好的答案。我仍然对这些概念感到困惑。

我从 Internet 上找到了一个接口示例,如下所示。该代码在没有具有相同输出的接口的情况下工作。那么它的目的是什么?或者它不是接口的真正实现?我需要从过程编码转向面向对象的编程。如果有人能用更复杂的技术语言来解释,那就更好了。

 <?php
interface IPillage
{
public function emptyBankAccounts();
public function burnDocuments();
}

class  Employee 
{
public function emptyBankAccounts()
{
echo "Call employees and ask to transfer funds to Swiss bank account";
}
public function burnDocuments()
{
echo "Torch the office suite of the employee";
}

}

class Executive  extends Employee implements IPillage
{
public function emptyBankAccounts()
{
echo "Call executive and ask to transfer funds to Swiss bank account";
}
public function burnDocuments()
{
echo "Torch the office suite of the executive";
}

}
$obj1=new Employee();
$obj2=new Executive();
$obj1->emptyBankAccounts();
echo '<br>';
$obj2->emptyBankAccounts();
?>

【问题讨论】:

  • 我已经看过那篇文章,但不太理解。这就是为什么我将它作为一个新问题发布。
  • 如果您刚开始使用面向对象编程,那么您不需要需要使用接口。接口应该在你的学习过程中出现。他们的目的是定义一个协议。如果您有一个带有单个函数的接口query,那么实现该接口的每个类都将具有该函数。这样,您确定所有源自您的接口的类都将遵循一个规则,即拥有一个名为query 的函数。至于为什么需要接口,这超出了你的问题范围。

标签: php oop interface


【解决方案1】:

界面:

不能被实例化。是一种特殊类型的抽象类,其中所有成员都没有任何实现。 启用多态性。 一个类可以实现多个接口。 通常用于应用程序类:提供确保交互性的契约。

目标:确保某些东西可以互换。 实现接口的类需要包含所有实现,否则编译器会抛出错误。 CAN-DO 关系。 例如学生可以注册,学生可以提交作业。

  public interface ICanEnrol
{
    void Enrol();
}

public interface ICanSubmit
{
    void Submit();
}

public class Student : ICanEnrol, ICanSubmit
{
    public void Enrol()
    {
        School.Send("enrolment");
    }

    public void Submit()
    {
        School.Send("report");
    }
}

public class Employee : ICanEnrol, ICanSubmit
{
    public void Enrol()
    {
        Company.Send("enrolment");
    }

    public void Submit()
    {
        Company.Send("report");
    }
}

【讨论】:

  • 如果我们使用具有相同功能的不同类而没有接口怎么办?这是我的疑问。在我的示例中,没有接口的输出也相同?
  • 你需要了解接口的概念。它是实现它的类的契约。
【解决方案2】:

正如 PraDes 所写,创建接口会创建一种契约。这确实是这里的关键概念。

假设您正在与其他开发人员团队一起开发一个项目。有几个新类需要编写,团队希望就通用方法/设计模式达成共识。每个人都同意这些类中的每一个都需要一个 foo 方法、一个 bar 方法和一个 baz 方法。这些方法如何工作的具体细节在每个类中都会有所不同。但是,它们应该具有相同的签名。

我们决定创建一个接口来命名每个类应该具有的方法(foo、bar、baz)以及它们的签名是什么(即它们采用什么参数)。现在,当我们每个人编写其中一个新类时,我们将“实现”接口。通过声明“MyClass”实现“MyInterface”,我们现在需要在我们的类中实现 foo、bar 和 baz 方法。如果我们不这样做,我们的 IDE、我们的编译器、我们的运行时环境等都会抛出错误。

【讨论】:

    【解决方案3】:

    许多语言只允许单继承,通过接口,您可以拥有一种多重继承……您可以从基类继承,同时也可以从许多接口继承。 例如,你可以有很多类,比如人类、动物、卡车。它们当然是不同的,但是它们可以用一个叫做“移动”的方法来实现一个像“movable”这样的接口。 在这种情况下,我可以从“可移动元素”的光学中引用三个不同的对象。我可以说 myHuman.move/myMonkey.move / my Truck.move.. 我确信我可以要求移动到任何对象实现了可移动接口,而不关心特定对象可以做的其他事情......要考虑接口,我必须考虑它们提供的功能。 对不起我的英语我来自阿根廷。 尼古拉斯·佩里雄

    【讨论】:

    • 感谢您抽出宝贵时间提供帮助。
    猜你喜欢
    • 2011-10-20
    • 2016-08-30
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    相关资源
    最近更新 更多