Проще говоря: нет. В PHP сигнатура метода не включает в себя набор параметров, только это имя. Поэтому два метода с одним и тем же именем, но с разными параметрами, фактически считаются равными (и, следовательно, результаты ошибок).
У PHP есть другой процесс, который он вызывает перегрузку метода, но это другой подход к проблеме. В PHP перегрузка - это способ, с помощью которого методы и свойства могут динамически создаваться на объекте во время выполнения. Далее следует пример с использованием метода __call
.
Метод класса будет вызываться, если нет метода, соответствующего имени метода, который был вызван внутри класса. Он получит имя метода и массив аргументов.
class OverloadTest {
public function __call($method, $arguments) {
if ($method == 'overloadedMethodName') {
switch (count($arguments)) {
case 0:
return $this->overloadedMethodNoArguments();
break;
case 1:
return $this->overloadedMethodOneArgument($arguments[0]);
break;
case 2:
return $this->overloadedMethodTwoArguments($arguments[0], $arguments[1]);
break;
}
}
}
protected function overloadedMethodNoArguments() { print "zero"; }
protected function overloadedMethodOneArgument($one) { print "one"; }
protected function overloadedMethodTwoArguments($one, $two) { print "two"; }
}
$test = new OverloadTest();
$test->overloadedMethodName();
$test->overloadedMethodName(1);
$test->overloadedMethodName(1, 2);
В качестве альтернативы, вы можете указать функцию с аргументами по умолчанию, который будет эффективно позволяет синтаксис, выглядит как перегрузка. Такие, как:
function testFunction($one, $two = null, $three = null) {
}
testFunction(1);
testFunction(1, 2);
testFunction(1, 2, 3);
И, наконец, как и для третьего метода, вы можете, конечно, всегда доступ аргументы как массив внутри самой функции
function variableFunction() {
$arguments = func_get_args();
switch (count($arguments)) {
// ...
}
}
variableFunction();
variableFunction(1, 2, 3, 4, 5, 6, 7, 8, 9);
Да, это дубликат. Что мне нужно сделать с этим вопросом? – zajke