Per quanto ho capito, non sono già possibili linguaggi come Java , C# ecc. Perché il nome del metodo di definizione del costruttore in queste lingue deve essere uguale al nome della classe. Questo perché parlerò di PHP che la creazione del costruttore è più astratto dal nome della classe.
public function __construct(Type1 $arg1, Type2 $arg2)
{
...
}
Fondamentalmente è possibile in PHP imporre construction in interface .
interface MyInterface {
public function __construct(Type1 $arg1, Type2 $arg2);
public function method1(Type3 $arg1) : Type3;
}
class MyClass implements MyInterface {
public function __construct(Type1 $arg1, Type2 $arg2)
{
// Implementation.
}
public function method1(Type3 $arg1) : Type3
{
// implementation
}
}
$object = new MyClass(new Type1(), new Type2());
Quindi fondamentalmente funziona. Se provo a definire un'implementazione di constructor diversa da interface , in pratica mi dà l'errore di tipo. È molto bello poter applicare il comportamento construction dell'oggetto con contract . Ma non ho visto questa pratica in altre lingue OOP cosa intendo Java è più OOP di PHP e domina il mondo OOP.
Quindi ecco alcune delle mie domande:
- Questa pratica ha alcune insidie che non vedo?
- Non c'è nulla di affermato in questa situazione in manuale o non l'ho ancora visto.
Is this may be a harmless bug in PHP?
Fondamentalmente quando passiamo attraverso l'ereditarietà se applichiamo la costruzione di una classe, essa impone anche i costruttori delle sottoclassi o ha la stessa firma. In caso contrario, è possibile solo il sovraccarico della funzione con i costruttori in PHP . Blocca semplicemente questo comportamento e può danneggiare l'estensibilità rispetto all'ereditarietà.
Ma anche final keyword punta a finalizzare l'ereditarietà applicandoli così per le classi finali e / o le classi che non vogliamo lasciare sovraccaricare i suoi costruttori? Pensi che sia una buona idea?
Mi piacerebbe sentire alcune idee e chiarimenti potrei abusare del comportamento che mi piace capire chiaramente.