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.