PHP5中的PHP4构造函数命名约定

时间:2009-12-10 20:48:32

标签: php oop

除了“您不必更改名称”之外,保留PHP4样式构造函数名称是否存在任何实际问题:

ClassName($args)
在PHP5中

6 个答案:

答案 0 :(得分:9)

因为命名构造函数仅保留在PHP5中以便与PHP4向后兼容,所以它们更有可能在PHP的后续版本中被弃用,而不是__construct(),所以如果你正在编写,那就要记住了你打算长寿的东西。

答案 1 :(得分:6)

如果您使用旧样式的构造函数名称,那么就会对这种情况造成一些混淆

class A
{
    public function A()
    {
    }
}

class B extends A
{
    public function B()
    {
        //how do/should I call the parent constructor?
        //parent::A(); ?
        //parent::__construct(); ?
    }
}

如果有人看到旧样式构造函数并将其切换为较旧的样式构造函数,则可能会破坏功能。此外,如果你必须处理你的对象heirarchy以便B扩展另一个类,你需要手动更改所有对parent::A()的调用,或者不熟悉“构造函数是一个带有类名的方法”构造的人(意味着在过去的5年里学过PHP的人)可能不知道这样做,并且会发生微妙的破坏。

答案 2 :(得分:3)

对于PHP5,保留它没有问题。但是,如果该类具有__construct()函数,则会调用它。

答案 3 :(得分:1)

According to the documentation,这是唯一的缺点。

答案 4 :(得分:0)

没有。除此之外,它是丑陋的(imo)并带走了一个可能的函数名称。 ^^

答案 5 :(得分:0)

在php 4 oop中,其他所有内容都是一个hack,它是一个代码剪切为php 5风格的构造函数,但它兼容php 4

class Object
{
    function Object()
    {
        $args= func_get_args();
        call_user_func_array
        (
            array(&$this, '__construct'),
            $args
        );
    }

    function __construct()
    {
        // Abstrakt Funktion
    }
}