看看这个例子:
class ParentClass {
public function __construct() {
// Does not prevent using 'SomeObject' as constructor
}
}
class SomeObject extends ParentClass {
function SomeObject () {
// Should not use this as constructor
}
}
$obj = new SomeObject();
如何防止每个扩展类使用类名作为构造函数?我试图设置一个空的__construct
,但它仍然调用SomeObject-Method(实际上是逻辑的)。
有没有办法在php.ini中禁用它,或者像我上面尝试的那样?我用Google搜索了大约2个小时,但我找不到任何东西。
迎接
答案 0 :(得分:1)
您可以尝试将function SomeObject
设为私有:
private function SomeObject()
但是,这很奇怪。根据{{3}},当您的类包含__construct
或者来自另一个具有__construct
的类时,不应该调用旧样式构造函数。因此,如果您确实确定会发生这种情况,也许您可以提交错误报告。
[编辑] 根据请求,我在PHP 5.4.3本地测试了这个。我可以确认确实调用了旧样式构造函数。我觉得这与这句话相矛盾:
为了向后兼容,如果PHP 5找不到__construct() 给定类的函数,并且该类没有从a继承 父类,它将搜索旧式构造函数, 通过班级的名字。
在这种情况下,该类确实继承了__construct()
函数,因此PHP不应该搜索旧的构造函数。