Perché non posso usare un codice come questo?Perché PHP non ha un costruttore predefinito?
<?php
class NoConstructor {
}
class ChildWithConstructor extends NoConstructor {
public function __construct() {
parent::__construct();
// do something
}
}
$foo = new ChildWithConstructor();
// **Fatal error: Cannot call constructor in file.php on line 8**
Es. Le classi Java hanno default, nessun costruttore di args. Può essere chiamato anche se non è definito in modo esplicito.
Il comportamento di PHP può causare problemi quando non si rimuove il costruttore di args dalla classe padre, ad es. quando pensiamo che non è più necessario.
Qualcuno sa perché i creatori di PHP hanno fatto in questo modo?
Accanto alla domanda, è necessario ricordare che è possibile aggirare il problema: verificare la presenza della funzione prima della chiamata. –
I creatori di PHP hanno fatto un * sacco * di decisioni sciocche ... –
http://www.php.net/manual/en/function.is-callable.php: if (is_callable ('parent :: __ construct')) { parent :: __ construct(); } –