__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");
答案 0 :(得分:32)
命名的方法是PHP4构造函数的方式。
为了向后兼容,如果PHP 5找不到给定类的__construct()函数,它将按类的名称搜索旧式构造函数。实际上,这意味着唯一具有兼容性问题的情况是该类是否有一个名为__construct()的方法,该方法用于不同的语义。
从PHP 5.3.3开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。此更改不会影响非命名空间的类。
答案 1 :(得分:6)
与class相同的构造函数是PHP4的向后兼容性功能。从PHP 5.3.3开始,它不适用于命名空间类
如果同时存在__construct
和class-named
函数,则__construct
将用作构造函数。
答案 2 :(得分:3)
不同之处在于不推荐使用类的相同名称调用构造函数。
答案 3 :(得分:3)
第一个是旧的php4风格“构造”。它与__construct
基本相同。
答案 4 :(得分:2)
区别在于PHP 5.3.3及更高版本会将function foo()
视为常规方法而不是构造函数。以前的版本会将其视为构造函数。