为什么PHP 5使用__construct()而不是类Name()作为构造函数?

时间:2009-10-06 17:25:31

标签: php oop

为什么我应该在PHP 5中使用function __construct()而不是function className()

6 个答案:

答案 0 :(得分:27)

__魔术方法/函数似乎是PHP中的一致主题(一次!)。使用__construct()而非ClassName()作为构造函数的一个优点是,如果更改类的名称,则无需更新构造函数。

答案 1 :(得分:4)

因为php5想要更像python。

我小孩,我小时候......

对标准操作(如构造)采用标准方法是一种合理的解决方案。这与在C#类中扩展类时使用base来调用基类构造函数而不是命名对象的原因相同:它简化了代码并使维护更容易。

答案 2 :(得分:4)

因为它已经与__destruct()方法和以两个下划线开头的其他特殊方法统一,例如__get,__sleep,__ serialize http://us2.php.net/manual/en/language.oop5.magic.php

答案 3 :(得分:2)

我的猜测是,当面向对象的功能被添加到PHP时,设计师们正在研究Python。

答案 4 :(得分:1)

通过这样做,您可以从super(base-)类调用构造函数,而无需知道其名称。这对于类树维护非常有用,因为您不想仅仅因为重新安排类树而更新所有类

和......只是猜测..如果所有类都将它们的构造函数命名为__construct(),理论上构造函数可以从超类继承,而不需要任何必需的定义。这在具有中间抽象类的类树中是有意义的,并且在诸如在目标C中的构造中是有意义的,其中默认构造函数行为完全从类元数据导出,因此(在原理中!)根本不需要编码。

答案 5 :(得分:0)

老问题,但我会咬人,因为还没有人真正回答过实际的问题。

function className()是PHP4-style constructor

function __construct()是PHP5-style constructor

您应该使用后者,因为前者已弃用,可能会从语言中删除。

此外,前者可能会或可能不会忽略各种PHP5 OO概念,例如公共/私有可见性运算符。如果您没有使用Singleton或Factory模式,那么您并不想将构造函数设为私有。