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

2022-08-30 07:17:06

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

这到底是有原因的吗?它是否会产生固有的不良代码?是被广泛接受的语言设计不允许它,还是其他语言比PHP更好?


答案 1

你不能在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);

答案 2

您可以使用变量参数来产生相同的效果。如果没有强类型,添加就没有多大意义,给定默认参数和所有其他“解决方法”。


推荐