__construct和与类同名的函数有什么区别?

gen*_*sis 16 php constructor class function

可能重复:
__construct用于什么功能?

__construct函数和具有同类名称的函数有什么区别吗?

class foo {
    function foo ($something){
        echo "I see ".$something." argument";
    }
}

class bar {
    function __construct ($something){
        echo "<br />
            I see ".$something." argument again";
    }
}

$foo = new foo("foo");
$bar = new bar("bar");
Run Code Online (Sandbox Code Playgroud)

Dam*_*ien 33

命名的方法是PHP4构造函数的方式.

为了向后兼容,如果PHP 5找不到给定类的__construct()函数,它将按类的名称搜索旧式构造函数.实际上,这意味着唯一具有兼容性问题的情况是该类是否有一个名为__construct()的方法,该方法用于不同的语义.

从PHP 5.3.3开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数.此更改不会影响非命名空间的类.

http://www.php.net/manual/en/language.oop5.decon.php

  • @ ring0:最重要的原因是削减不必要的依赖/冗余的一般原则.您是否曾经发现自己在重构过程中深夜改变了类名?然后由于忘记重新命名其中一个构造函数而在整个晚上进行调试(由于你的孩子打断了:"爸爸,你为什么不睡觉?今晚我们还可以熬夜吗?")?使用`__construct()`,既不存在这种风险,也不再存在不必要的额外输入.它甚至是免费的. (7认同)

Mch*_*chl 6

名为class的构造函数是PHP4的向后兼容功能.从PHP 5.3.3开始,它不适用于命名空间类

如果两者__constructclass-named函数都存在,则将其__construct用作构造函数.