Usage of Interfaces
只是前面一个关于oo php的问题的澄清。我已经在php.net网站上查过了,但还不能完全确定。我想应该是个快速的答案。
在接口中"定义"方法时,实现它的类必须使用接口中列出的所有方法吗?
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 } } |
这样行吗?
不可以。实现接口的类必须实现该接口定义的所有方法或定义为抽象方法。如果您尝试在未定义所有方法的情况下运行脚本,您将得到
Fatal error: Class bar contains 1 abstract method and must therefore be declared abstract or implement the remaining methods
换句话说,要么
1 | abstract class bar implements foo {} |
或
1 2 3 4 | abstract class bar implements foo { public function blah() { /* code */ } public function bleh() { /* code */ } } |
或者在具体类中留下一些空方法
1 2 3 4 5 | class bar implements foo { public function blah() { /* code */ } public function bleh() { /* code */ } public function de() {} } |
是的,也不是。您可以在一个
对于实例化的类,它们必须始终实现整个接口。这就是接口的要点,你知道如果
接口上的文档实际上相当好。我建议你读一下……
不,不行。当你试图实例化类时,你会得到一个错误。整个接口点都指向定义的函数,这些函数必须在实现接口的InstanceSet对象中定义。但是,您可以做的是将另一个类扩展到您已经定义的类,在那里定义缺少的函数并声明这个函数。