Может ли класс расширить оба класса и реализовать интерфейс

Может ли класс расширять как интерфейс, так и другой класс в 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 - невероятно плохая идея. Наследование как таковое, вероятно, является самой переоцененной и неправильно используемой концепцией в объектно-ориентированном программировании.

Вместо этого я бы посоветовал использовать db-связанные вещи методом mysqli (или способом PDO).

Плюс, второстепенное, но соглашения об именах имеют значение. Ваш класс database кажется более общим, чем mysqli, поэтому он предполагает, что последний наследует от database, а не наоборот.

Ответ 3

да, на самом деле, если вы хотите реализовать несколько интерфейсов, вы можете сделать это следующим образом:

public class MyClass extends BaseClass implements myInterface1, myInterface2, myInterface3{ 

}