Czy klasa może rozszerzyć zarówno interfejs, jak i inną klasę w PHP?
Zasadniczo chcę to zrobić:
interface databaseInterface{
public function query($q);
public function escape($s);
//more methods
}
class database{ //extends both mysqli and implements databaseInterface
//etc.
}
Jak można to zrobić, po prostu robiąc:
class database implements databaseInterface extends mysqli{
powoduje błąd krytyczny:
Błąd analizy: błąd składni, nieoczekiwany T_EXTENDS, oczekiwanie „{” w * pliku * w wierszu * w wierszu *
php
php-parse-error
Pim Jager
źródło
źródło
Odpowiedzi:
Spróbuj na odwrót:
To powinno działać.
źródło
Tak, może. Wystarczy zachować odpowiednią kolejność.
Ponadto klasa może implementować więcej niż jeden interfejs. Po prostu oddziel je przecinkami.
Czuję się jednak zobowiązany do ostrzeżenia, że rozszerzenie klasy mysqli to niesamowicie zły pomysł . Dziedziczenie samo w sobie jest prawdopodobnie najbardziej przereklamowaną i nadużywaną koncepcją w programowaniu obiektowym.
Zamiast tego radziłbym robić rzeczy związane z db metodą mysqli (lub sposobem PDO).
Poza tym drobiazg, ale konwencje nazewnictwa mają znaczenie. Twoja klasa
database
wydaje się wtedy bardziej ogólnamysqli
, dlatego sugeruje, że ta ostatnia dziedziczy po,database
a nie odwrotnie.źródło
tak, w rzeczywistości, jeśli chcesz zaimplementować wiele interfejsów, możesz zrobić to w następujący sposób:
źródło