Я отказался от всей надежды на когда-либо способность перегрузить моих конструкторов в PHP, поэтому что я действительно хотел бы знать, то, почему.
Существует ли даже причина его? Это создает по сути плохой код? Это - широко принятый дизайн языка для не разрешения его, или действительно ли другие языки более хороши, чем PHP?
Вы можете использовать различные аргументы для получения того же эффекта. Без сильных набрав, это не имеет большого смысла добавлять, учитывая аргументы по умолчанию и все другие «обороты».
Вы не можете перегружать любой метод в 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);
Мне действительно нет эксперта ООП, но, насколько я понимаю Перегрузка означает способность метода действовать по-разному в зависимости от параметров, которые он получает в качестве ввода. Это очень возможно с PHP, вы просто не объявляете типы ввода, поскольку PHP не имеет сильных печамок, и вся перегрузка выполняется при выполнении времени, а не время компиляции.
Истинная перегрузка в PHP действительно не поддерживается. Как упоминалось в @Pestilence, вы можете использовать переменные аргументы. Некоторые просто используют ассоциативный массив различных опций, чтобы преодолеть это.
Насколько я знаю, перегрузка конструктора в PHP не допускается, просто потому, что разработчики PHP не включали эту функциональность - это одна из многих жалоб на PHP.
Я слышал о хитрости и обходные пути, но истинная перегрузка в ощущении ООП отсутствует. Может быть, в будущих версиях, он будет включен.