PHP:接口的概念?

时间:2013-10-10 12:39:37

标签: php oop interface

任何人都可以通过良好的例子来解释接口的概念。我搜索但没有找到一个好的答案。我仍然对这些概念感到困惑。

我找到了一个来自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();
?>

3 个答案:

答案 0 :(得分:1)

许多语言只允许单继承,通过接口,您可以拥有一种多重继承...您可以从基类继承,同时也可以从许多接口继承。 例如,你可以有许多类,如人类,动物,卡车。它们当然是不同的,但它们可以通过一种称为“移动”的方法实现“可移动”这样的界面。 在这种情况下,我可以从“可移动元素”的光学中引用三个不同的对象。我可以说myHuman.move / myMonkey.move /我的Truck.move ..我确信我可以要求移动到任何对象实现可移动的界面,而不是关注特定对象可以做的其他事情......想想一个界面,我必须考虑它们提供的功能。 抱歉我的英语我来自阿根廷。 Nicolas Perichon

答案 1 :(得分:0)

接口:

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

目标:确保某些东西可以互换。 实现接口的类需要包含所有实现,否则编译器将抛出错误。 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 :(得分:0)

正如PraDes所写,创建一个界面会创建一种契约。这真的是这里的关键概念。

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

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