A partir de PHP 5.3.3, he probado esto con 5.6 y 7.0, declarando el método de una clase final
__construct
evitará cualquier clase hija anulando el constructor, ya sea usando __construct
o el estilo PHP 4 de ClassName()
(nótese que la El estilo PHP 4 está en desuso a partir de PHP 7). La prevención de una clase secundaria que declare un constructor asegurará que siempre se llame al constructor padre. Esto, por supuesto, no permitirá que ninguna clase secundaria implemente su propia lógica de constructor. Definitivamente habría casos de uso práctico para esto, aunque no lo recomendaría como una buena práctica en general.
Algunos ejemplos:
sin declarar __construct
última
class ParentClassWithoutFinal {
private $value = "default";
public function __construct() {
$this->value = static::class;
}
function __toString() {
return $this->value;
}
}
class ChildClassA extends ParentClassWithoutFinal {
public function __construct() {
// Missing parent::__construct();
}
}
echo (new ChildClassA()); // ouput: default
con Final __construct
class ParentClassWithFinal extends ParentClassWithoutFinal {
public final function __construct() {
parent::__construct();
}
}
class ChildClassB extends ParentClassWithFinal {
}
echo (new ChildClassB()); // output: ChildClassB
Tratando de declarar __construct
en una clase hija
class ChildClassC extends ParentClassWithFinal {
public function __construct() {
}
}
// Fatal error: Cannot override final method ParentClassWithFinal::__construct()
Tratando de declarar ClassName()
constructor en una clase hija
class ChildClassD extends ParentClassWithFinal {
public function ChildClassD() {
}
}
// Fatal error: Cannot override final ParentClassWithFinal::__construct() with ChildClassD::ChildClassD()
// Also in PHP 7: Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ChildClassD has a deprecated constructor
entiendo por qué usted no confía en los programadores de PHP, pero yo no entiendo por qué te importa :-) –
Sólo intento ser explícito con mi código –