Ab PHP 5.3.3, ich habe diese getestet mit 5,6 und 7,0, die __construct
Methode einer Klasse deklarieren final
entweder den Konstruktor überschreiben jedes Kind Klasse verhindern mit __construct
oder die PHP-4-Stil ClassName()
(beachten Sie, dass die PHP 4 Stil ist ab PHP 7 veraltet. Durch das Verhindern, dass eine untergeordnete Klasse einen Konstruktor deklariert, wird sichergestellt, dass der übergeordnete Konstruktor immer aufgerufen wird. Dies wird natürlich keiner untergeordneten Klasse erlauben, ihre eigene Konstruktorlogik zu implementieren. Es würde sicherlich praktische Anwendungsfälle geben, obwohl ich es generell nicht empfehlen würde.
Einige Beispiele:
Ohne __construct
final
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
Mit final __construct
class ParentClassWithFinal extends ParentClassWithoutFinal {
public final function __construct() {
parent::__construct();
}
}
class ChildClassB extends ParentClassWithFinal {
}
echo (new ChildClassB()); // output: ChildClassB
Versuch __construct
in einer untergeordneten Klasse zu erklären
erklärt 210
class ChildClassC extends ParentClassWithFinal {
public function __construct() {
}
}
// Fatal error: Cannot override final method ParentClassWithFinal::__construct()
Versuch ClassName()
Konstruktor in einer Kindklasse
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
Ich verstehe, warum Sie nicht vertrauen PHP-Programmierer, aber ich verstehe nicht, warum Sie kümmern versucht, ich bin gerade :-) –
zu erklären explizit mit meinem Code sein –