Php 什么';_u_构造和与类同名的函数之间有什么区别?

Php 什么';_u_构造和与类同名的函数之间有什么区别?,php,class,function,constructor,Php,Class,Function,Constructor,可能重复: _u_构造函数和与类同名的函数之间有什么区别吗 class foo { function foo ($something){ echo "I see ".$something." argument"; } } class bar { function __construct ($something){ echo "<br /> I see ".$something." argument a

可能重复:

_u_构造函数和与类同名的函数之间有什么区别吗

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");
class-foo{
函数foo($something){
呼应“我明白了”.$某物.“论点”;
}
}
分类栏{
函数构造($something){
回声“
我看到了“$something.”再次争论; } } $foo=新foo(“foo”); $bar=新的bar(“bar”);
名为的方法是执行构造函数的PHP4方法

为了向后兼容,如果PHP5找不到给定类的_construct()函数,它将根据类的名称搜索旧式构造函数。实际上,这意味着唯一存在兼容性问题的情况是,该类有一个名为_construct()的方法,该方法用于不同的语义

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


不同之处在于PHP版本5.3.3及更高版本将
函数foo()
视为常规方法,而不是构造函数。以前的版本将其视为构造函数。

不同之处在于,不推荐使用类的相同名称调用构造函数

第一个是旧的php4样式的“构造”。它基本上与
\u construct

构造函数相同,名为same as class的构造函数是PHP4的向后兼容特性。自PHP5.3.3以来,它将不适用于名称空间类


如果同时存在
\u构造
类命名
函数,则
\u构造
将用作构造函数。

请参阅此问题的公认答案谢谢Allison。将问题标记为重复的人应该被要求发布原始问题。出于好奇,我敢回答“为什么”。。。他们为什么改变?将构造函数名作为类名有什么错。。。他们为什么要引入(丑陋的)构造…@ring0可能是因为
\uu构造
语法更符合其他所有语法,这就是构造函数。此外,此更改使类名可以作为常规类方法使用。@ring0:最重要的原因是减少不必要的依赖项/冗余的一般原则。你有没有发现自己在更早的时候在改组过程中更改类名?然后整个晚上都在调试,因为忘了给其中一个构造函数重命名(因为你的孩子打断了你:“爸爸,你为什么不睡觉?我们今晚也能熬夜吗?”?有了
\uu construct()
,这种风险和不必要的额外键入都不存在了。它甚至是免费的,这是一个有效的观点。但是这些神奇的方法值得拥有这个属性。。。PHP人员添加了一些“_u”来(通常)防止与现有方法的名称冲突;这样更好吗?至少在C++构造函数中没有返回值,因此如果重命名类(如果不是PHP),编译会失败。在我看来,最好是在实际方法名之前创建一个合适的构造函数关键字,而不是通常的函数<代码>构造函数myConstruct(){…}。但这可能会给PHP团队带来更多的工作……当使用没有名称空间的类时,它并没有被弃用。请参阅已批准的答案和周围的评论。