为什么我应该在PHP 5中使用function __construct()
而不是function className()
?
答案 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模式,那么您并不想将构造函数设为私有。