Php 接口的使用

Php 接口的使用,php,oop,interface,Php,Oop,Interface,只是来自OO PHP的澄清。我已经在php.net网站上查过了,但仍然不能完全确定。我想这应该是一个快速的答案 在接口中“定义”方法时,实现它的类必须使用接口中列出的所有方法吗 例如: interface foo { public function blah(); public function de(); public function bleh(); } class bar implements foo { public function blah() {

只是来自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
    }
}

这行吗?

不行。实现的类必须实现接口定义的所有方法或抽象定义的所有方法。如果您尝试在没有定义所有方法的情况下运行脚本,您将得到

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

换言之,两者都可以

abstract class bar implements foo {}

或者在具体类中保留一些方法为空

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

好的,是和否。您可以在一个应用程序中实现接口的一个子集。请注意,您不能实例化抽象类(但它对于提供公共功能很有用)

对于实例化类,它们必须始终实现整个接口。这就是接口的要点,您知道如果
$foo instanceof foointerface
它将始终支持接口中声明的每个方面(因此在执行
$bar->de()
时不会出错或做意外的事情)

事实上,它们都相当不错。我建议大家看一看……

不,它不起作用。 当您尝试实例化该类时,将得到一个错误。 接口的全部要点是定义必须在实现接口的InstanceAt对象中定义的函数。
但是,您可以做的是将另一个类扩展到您已经定义的类,在其中定义缺少的函数并实例化此类。

这应该是
function
not
method
是的,编辑过的问题。感谢您向我指出它。
class bar implements foo {
    public function blah() { /* code */ }
    public function bleh() { /* code */ }
    public function de() {}
}