一个类可以同时扩展一个类并实现一个接口吗?

2022-08-30 07:17:16

一个类可以在PHP中同时扩展一个接口和另一个类吗?
基本上我想这样做:

interface databaseInterface{
 public function query($q);
 public function escape($s);
 //more methods
}

class database{ //extends both mysqli and implements databaseInterface
 //etc.
}

如何做到这一点,简单地做:

class database implements databaseInterface extends mysqli{ 

导致致命错误:

Parse error: syntax error, unexpected T_EXTENDS, expecting '{' in *file* on line *line*

答案 1

试试反面:

class database extends mysqli implements databaseInterface { ...}

这应该有效。


答案 2

是的,可以。您只需要保留正确的顺序即可。

class database extends mysqli implements databaseInterface { ... }

此外,一个类可以实现多个接口。只需用逗号分隔它们。

但是,我觉得有必要警告你,扩展mysqli类是非常糟糕的主意。继承本身可能是面向对象编程中最被高估和误用的概念。

相反,我建议以mysqli方式(或PDO方式)做与db相关的事情。

另外,这是一件小事,但命名约定确实很重要。你的类看起来更通用,因此它表明后者继承而不是绕过的方式。databasemysqlidatabase


推荐