首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我不能在PHP中重载构造函数?

为什么我不能在PHP中重载构造函数?
EN

Stack Overflow用户
提问于 2010-01-31 05:12:20
回答 14查看 70.9K关注 0票数 114

我已经放弃了在PHP中重载构造函数的所有希望,所以我真正想知道的是为什么。

这是有原因的吗?它本身就会产生糟糕的代码吗?它是被广泛接受的语言设计而不允许的,还是其他语言比PHP更好?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-02-01 15:15:22

你不能在PHP中重载任何方法。如果您希望在传递几种不同的参数组合时能够实例化PHP对象,请使用带有私有构造函数的工厂模式。

例如:

代码语言:javascript
复制
public MyClass {
    private function __construct() {
    ...
    }

    public static function makeNewWithParameterA($paramA) {
        $obj = new MyClass(); 
        // other initialization
        return $obj;
    }

    public static function makeNewWithParametersBandC($paramB, $paramC) {
        $obj = new MyClass(); 
        // other initialization
        return $obj;
    }
}

$myObject = MyClass::makeNewWithParameterA("foo");
$anotherObject = MyClass::makeNewWithParametersBandC("bar", 3);
票数 152
EN

Stack Overflow用户

发布于 2010-01-31 05:27:09

您可以使用variable arguments来产生相同的效果。如果没有强类型,在给定默认参数和所有其他“变通方法”的情况下,添加没有多大意义。

票数 59
EN

Stack Overflow用户

发布于 2016-06-28 21:46:01

为了完整起见,我建议使用Fluent Interfaces。其想法是,通过将return $this;添加到方法的末尾,您可以将调用链接在一起。因此,不是

代码语言:javascript
复制
$car1 = new Car('blue', 'RWD');
$car2 = new Car('Ford', '300hp');

(这根本不会起作用),你可以这样做:

代码语言:javascript
复制
$car = (new Car)
       ->setColor('blue')
       ->setMake('Ford')
       ->setDrive('FWD');

这样,您就可以准确地选择要设置的属性。在很多方面,它类似于将一组选项传递给初始调用:

代码语言:javascript
复制
$car = new Car(['make' => 'Ford', 'seats' => 5]);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2169448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档