接口的用法

时间:2010-08-23 18:00:09

标签: php oop interface

来自an earlier question关于OO PHP的澄清。我已经在php.net网站上查了但仍不完全确定。应该是一个快速回答,我期待。

当在接口中“定义”方法时,实现它的类必须使用所有接口中列出的方法吗?

示例:

interface foo {
    public function blah();
    public function de();
    public function bleh();
}

class bar implements foo {
    public function blah() {
        //Code here
    }

    public function bleh() {
        //More code here
    }
}

那会有用吗?

3 个答案:

答案 0 :(得分:2)

没有。实现interface的类必须实现接口定义的所有方法或者定义为abstract。如果您尝试在没有定义所有方法的情况下运行脚本,那么您将获得

  

致命错误:类别栏包含1个抽象方法,因此必须声明为抽象方法或实现其余方法

换句话说,要么

abstract class bar implements foo {}

abstract class bar implements foo {
        public function blah() { /* code */ }
        public function bleh() { /* code */ }    
}

或在具体类

中留空一些方法
class bar implements foo {
    public function blah() { /* code */ }
    public function bleh() { /* code */ }
    public function de() {}
}

答案 1 :(得分:1)

嗯,是的,不是。您可以在abstract class中实现接口的子集。请注意,您无法实例化抽象类(但它对提供常用功能很有用)。

对于实例化的类,它们必须始终实现整个接口。这就是界面的重点,你知道如果$foo instanceof foointerface它将始终支持界面中声明的每个方面(因此不会出现错误或做出意外的事情{{1 }} ...

docs on interfaces实际上相当不错。我建议给它一个阅读......

答案 2 :(得分:0)

不,它不会起作用。 当您尝试实例化该类时,您将收到错误。 接口的整个要点是必须在实现接口的instanciatet对象中定义的已定义函数。 然而,你可以做的是将另一个类扩展到你已经定义的类,在那里定义缺失的函数并实现这个。