Почему я не могу перегрузить конструкторов в PHP?

Я отказался от всей надежды на когда-либо способность перегрузить моих конструкторов в PHP, поэтому что я действительно хотел бы знать, то, почему.

Существует ли даже причина его? Это создает по сути плохой код? Это - широко принятый дизайн языка для не разрешения его, или действительно ли другие языки более хороши, чем PHP?

96
задан tom 7 September 2012 в 20:52
поделиться

5 ответов

Вы можете использовать различные аргументы для получения того же эффекта. Без сильных набрав, это не имеет большого смысла добавлять, учитывая аргументы по умолчанию и все другие «обороты».

57
ответ дан 24 November 2019 в 05:36
поделиться

Вы не можете перегружать любой метод в 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);
132
ответ дан 24 November 2019 в 05:36
поделиться

Мне действительно нет эксперта ООП, но, насколько я понимаю Перегрузка означает способность метода действовать по-разному в зависимости от параметров, которые он получает в качестве ввода. Это очень возможно с PHP, вы просто не объявляете типы ввода, поскольку PHP не имеет сильных печамок, и вся перегрузка выполняется при выполнении времени, а не время компиляции.

1
ответ дан 24 November 2019 в 05:36
поделиться

Истинная перегрузка в PHP действительно не поддерживается. Как упоминалось в @Pestilence, вы можете использовать переменные аргументы. Некоторые просто используют ассоциативный массив различных опций, чтобы преодолеть это.

5
ответ дан 24 November 2019 в 05:36
поделиться

Насколько я знаю, перегрузка конструктора в PHP не допускается, просто потому, что разработчики PHP не включали эту функциональность - это одна из многих жалоб на PHP.

Я слышал о хитрости и обходные пути, но истинная перегрузка в ощущении ООП отсутствует. Может быть, в будущих версиях, он будет включен.

0
ответ дан 24 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: