Questo non funziona:Non può implementare due interfacce che hanno lo stesso nome del metodo
interface TestInterface
{
public function testMethod();
}
interface TestInterface2
{
public function testMethod();
}
class TestClass implements TestInterface, TestInterface2
{
}
mi dà l'errore:
Fatal error: Can't inherit abstract function TestInterface2::testMethod() (previously declared abstract in TestInterface).
E 'corretto? Perché questo non è permesso? Non ha senso per me.
Ciò accade anche con funzioni astratte, ad esempio se si implementa un'interfaccia e successivamente si eredita da una classe che ha una funzione astratta con lo stesso nome.
Ma l'intero punto delle interfacce è che non hanno implementazione. Cosa fare se si desidera rendere la classe in grado di essere passata a una funzione che specifica un'interfaccia per un parametro e un'altra che specifica un'altra interfaccia, ma entrambi hanno un metodo in comune? Un nome di metodo come "getName()" non avrà uno scopo diverso su un'interfaccia diversa. – Gnuffo1
In tal caso dovresti creare una nuova interfaccia, ad es. 'INamed' che contiene solo il metodo' getName() '. – ThiefMaster
Non hanno implementazione, ma hanno semantica, almeno implicitamente. Mentre tu * potresti * implementare un metodo in un'interfaccia per avere un significato completamente diverso nelle diverse classi che lo usano, ciò sarebbe contrario allo spirito delle interfacce. Tuttavia, se si implementano due interfacce diverse, non vi è alcuna garanzia che i loro specificatori sapessero qualcosa l'una dell'altra, e quindi che i metodi con lo stesso nome avessero una semantica simile. Immagino che tu possa fare in modo che ogni interfaccia estenda un'interfaccia comune che contiene il metodo comune. –