来自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
}
}
那会有用吗?
答案 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)