2014-02-09 5 views
1

Извините, если это глупый вопрос - я уже изучил некоторую java, и я знаю, что PHP принимает некоторые из своих объектно-ориентированных понятий, мне было интересно, можно ли перегружать методы аналогично следующим образом:Перегрузка метода в php?

public function add($number1, $number2){ 
     return ($number1 + $number2); 
    } 

    public function add($number1, $number2, $number3){ 
     return ($number1 + $number2 +$number3); 
    } 

Это возможно на PHP или я что-то пропустил - извиняюсь, если глупо заранее, просто пытаясь получить более глубокое понимание.

+0

Простой ответ: нет, PHP не поддерживает метод перегрузки (если не считать '__call', хотя это больше обходного пути). – Mark

ответ

1

PHP не поддерживает перегрузку методов/функций, но он поддерживает переменное количество аргументов с помощью func_num_args и func_get_arg

0

PHP не имеет никакого соответствия шаблону для сигнатур функций. Лучшее, что вы можете сделать, это подражать ему:

class A { 
    public function a() { 
    $args = func_get_args(); 
    switch (count($args)) { 
     case 0: 
     $overload = array($this, '_a0'); 
     break; 
     case 1: 
     $overload = array($this, '_a1'); 
     break; 
     default: 
     // … etc 
    } 
    return call_user_func_array($overload, $args); 
    } 
    protected function _a0() { … } 
    protected function _a1($arg) { … } 
    // … 
} 

Но это, вероятно, больше проблем, чем стоит IRL.

+1

Это метод переопределения, а не перегрузка (это то, о чем попросил опер) – Mark

+1

@RainFromHeaven, вы совершенно правы. Переписан. – kojiro

2

В PHP не существует реальный способ перегрузки, как показано на других языках программирования, таких как Java или C++, но вы можете использовать дополнительные параметры, таким образом

public function add($number1, $number2, $number3 = 0){ 
    return ($number1 + $number2 + $number3); 
} 

$ number3 необязателен со значением 0

или вы можете передать массив значений или просто использовать попробовать func_get_arg()

function foo() 
{ 
    $numargs = func_num_args(); 
    echo "Number of arguments: $numargs<br />\n"; 
    if ($numargs >= 2) { 
     echo "Second argument is: " . func_get_arg(1) . "<br />\n"; 
    } 
    $arg_list = func_get_args(); 
    for ($i = 0; $i < $numargs; $i++) { 
     echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; 
    } 
} 
Смежные вопросы