由于PHP 5.3.3,我有5.6和7.0测试此,声明类final
的__construct
方法将防止任何儿童类中重写或者使用__construct
或ClassName()
的PHP 4的风格构造(注意,自PHP 7起,PHP 4风格已弃用)。防止声明构造函数的子类将确保始终调用父构造函数。这当然不会允许任何子类实现自己的构造函数逻辑。虽然我不会推荐它作为一般的良好实践,但肯定会有实际用例。
一些例子:
不宣__construct
最终
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
随着最后__construct
class ParentClassWithFinal extends ParentClassWithoutFinal {
public final function __construct() {
parent::__construct();
}
}
class ChildClassB extends ParentClassWithFinal {
}
echo (new ChildClassB()); // output: ChildClassB
试图在一个子类来声明__construct
class ChildClassC extends ParentClassWithFinal {
public function __construct() {
}
}
// Fatal error: Cannot override final method ParentClassWithFinal::__construct()
试图在一个子类
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
我明白你为什么不信任PHP程序员申报
ClassName()
构造函数,但我不明白为什么你关心:-) – 2010-01-03 03:28:41我只是想要明确我的代码 – 2010-01-03 10:56:02