Может ли класс расширять как интерфейс, так и другой класс в 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, ожидающий '{' in * file * on line * line *
Попробуйте это наоборот:
class database extends mysqli implements databaseInterface { ...}
Это должно сработать.
Да, оно может. Вам просто нужно сохранить правильный порядок.
class database extends mysqli implements databaseInterface { ... }
Кроме того, класс может реализовывать более одного интерфейса. Просто разделите их запятыми.
Тем не менее, я чувствую себя обязанным предупредить вас, что расширение класса mysqli – невероятно плохая идея . Наследование как таковое, вероятно, является самой переоцененной и неправильно используемой концепцией в объектно-ориентированном программировании.
Вместо этого я бы посоветовал использовать db-связанные вещи методом mysqli (или способом PDO).
Плюс, второстепенное, но соглашения об именах имеют значение. Ваша database
классов выглядит более общей, чем mysqli
, поэтому она предполагает, что последняя наследует database
а не наоборот.
да, на самом деле, если вы хотите реализовать несколько интерфейсов, вы можете сделать вот так:
public class MyClass extends BaseClass implements myInterface1, myInterface2, myInterface3{ }