防止在扩展类中使用类名作为构造函数

时间:2014-03-12 21:03:36

标签: php constructor

看看这个例子:

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个小时,但我找不到任何东西。

迎接

1 个答案:

答案 0 :(得分:1)

您可以尝试将function SomeObject设为私有:

private function SomeObject()
但是,这很奇怪。根据{{​​3}},当您的类包含__construct或者来自另一个具有__construct的类时,不应该调用旧样式构造函数。因此,如果您确实确定会发生这种情况,也许您可​​以提交错误报告。

[编辑] 根据请求,我在PHP 5.4.3本地测试了这个。我可以确认确实调用了旧样式构造函数。我觉得这与这句话相矛盾:

  

为了向后兼容,如果PHP 5找不到__construct()   给定类的函数,并且该类没有从a继承   父类,它将搜索旧式构造函数,   通过班级的名字。

在这种情况下,该类确实继承了__construct()函数,因此PHP不应该搜索旧的构造函数。