我已经放弃了在PHP中重载构造函数的所有希望,所以我真正想知道的是为什么。
这是有原因的吗?它本身就会产生糟糕的代码吗?它是被广泛接受的语言设计而不允许的,还是其他语言比PHP更好?
发布于 2010-02-01 15:15:22
你不能在PHP中重载任何方法。如果您希望在传递几种不同的参数组合时能够实例化PHP对象,请使用带有私有构造函数的工厂模式。
例如:
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);
发布于 2010-01-31 05:27:09
您可以使用variable arguments来产生相同的效果。如果没有强类型,在给定默认参数和所有其他“变通方法”的情况下,添加没有多大意义。
发布于 2016-06-28 21:46:01
为了完整起见,我建议使用Fluent Interfaces。其想法是,通过将return $this;
添加到方法的末尾,您可以将调用链接在一起。因此,不是
$car1 = new Car('blue', 'RWD');
$car2 = new Car('Ford', '300hp');
(这根本不会起作用),你可以这样做:
$car = (new Car)
->setColor('blue')
->setMake('Ford')
->setDrive('FWD');
这样,您就可以准确地选择要设置的属性。在很多方面,它类似于将一组选项传递给初始调用:
$car = new Car(['make' => 'Ford', 'seats' => 5]);
https://stackoverflow.com/questions/2169448
复制相似问题