Может ли класс расширять как интерфейс, так и другой класс в 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{
приводит к фатальной ошибке:
Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_EXTENDS, ожидание '{' в * файле * в строке * в строке *
php
php-parse-error
Пим Ягер
источник
источник
Ответы:
Попробуйте по-другому:
Это должно работать.
источник
Да, оно может. Вам просто нужно сохранить правильный порядок.
Более того, класс может реализовывать более одного интерфейса. Просто разделите их запятыми.
Однако я чувствую себя обязанным предупредить вас, что расширение класса mysqli - невероятно плохая идея. . Само по себе наследование, вероятно, является наиболее переоцененным и неправильно используемым понятием в объектно-ориентированном программировании.
Вместо этого я бы посоветовал делать вещи, связанные с db, способом mysqli (или способом PDO).
Плюс, мелочь, но соглашения об именах имеют значение.
database
Тогда ваш класс кажется более общимmysqli
, поэтому он предполагает, что последний наследуется от,database
а не наоборот.источник
да, на самом деле, если вы хотите реализовать несколько интерфейсов, вы можете сделать это так:
источник