我最近开始使用php,并且想知道__construct()与具有与该类同名的方法之间的区别?
是否有理由使用它?我可以解决的是它是否覆盖了名为Foo的方法,还是取决于您喜欢的方法?
E.g。
class Foo {
function Foo()
{
echo 'Foo stated<br>';
}
function __construct() {
echo 'Construct started<br>';
}
}
由于
答案 0 :(得分:8)
使用__construct()
是更新的PHP5更多以OOP为重点的方法来调用构造函数。使用与该类同名的方法是旧的弃用方法,它不会像PHP 5.3.3那样用作命名空间类的构造函数。
来自the constructors and destructors page:
为了向后兼容,如果PHP 5找不到给定类的__construct()函数,它将按类的名称搜索旧式构造函数。实际上,这意味着唯一具有兼容性问题的情况是该类是否有一个名为__construct()的方法,该方法用于不同的语义。
与其他方法不同,当使用与父__construct()方法不同的参数覆盖__construct()时,PHP不会生成E_STRICT级错误消息。
从PHP 5.3.3开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。此更改不会影响非命名空间的类。
答案 1 :(得分:7)
“如果PHP 5找不到给定类的__construct()函数,它将按类的名称搜索旧式构造函数。实际上,它意味着唯一会出现兼容性问题的情况如果该类有一个名为__construct()的方法,它用于不同的语义。“
答案 2 :(得分:3)
Foo()是一种php4方式(不推荐使用),__ construct()是php5方式。 php将首先查找__construct,然后,如果找不到它,它将使用Foo
答案 3 :(得分:3)
是否有理由使用它?我 可以解决它是否覆盖了 名为Foo的方法或者归结为 你更喜欢哪个?
当涉及重命名和继承时,__ construct()的好处变得更加清晰。如果重命名一个类,则必须重命名它的构造函数。没什么大不了的,但是如果B级继承自A级,你最终会得到:
class B extends A {
function B() {
parent::A();
}
}
这样做更容易,更易于维护:
function __construct() {
parent::__construct();
}
现在,当您重命名A类时,您不必记住也要更改其所有子级中的父级调用。当然,在代码中仍然需要重命名,但至少这不是其中之一。
答案 4 :(得分:0)
拥有一个与该类同名的方法,它自动被称为构造函数,这是对PHP4的回归,并且被认为已弃用...在PHP的最新开发分支中,它将被视为一个正常的方法。 __construct是PHP5中正式接受的构造函数,尽管在当前版本中,如果__construct不存在,它将回退到PHP4方法。