2013-07-23 2 views
0

Во время моей жизни программирования на PHP, когда я создаю функцию на PHP с таким же именем, но с разными параметрами, это вызывало ошибку. Из-за этого я задаюсь вопросом, имеет ли PHP какую-либо функцию перегрузки функции, и если бы это было, я бы оценил, чтобы показать мне пример.Имеет ли PHP функцию перегрузки функции, например C#, JAVA, C++

Спасибо.

+0

Да, это дубликат. Что мне нужно сделать с этим вопросом? – zajke

ответ

1

Проще говоря: нет. В 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); 
+0

Добавлены дополнительные методы для "перегрузки" –