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

时间:2011-07-29 12:16:03

标签: php class function constructor

  

可能重复:
  what is the function __construct used for?

__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");

5 个答案:

答案 0 :(得分:32)

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

  

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

     

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

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

答案 1 :(得分:6)

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

如果同时存在__constructclass-named函数,则__construct将用作构造函数。

答案 2 :(得分:3)

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

答案 3 :(得分:3)

第一个是旧的php4风格“构造”。它与__construct基本相同。

答案 4 :(得分:2)

区别在于PHP 5.3.3及更高版本会将function foo()视为常规方法而不是构造函数。以前的版本会将其视为构造函数。