Строго говоря, нет никакой разницы, так как вы не можете сделать и то, и другое:)
Переопределение функции можно было сделать с расширением PHP, таким как APD, но оно устарело, и последняя версия была непригодна для использования.
Перегрузка функций в PHP не может быть выполнена из-за динамической типизации, т. Е. В PHP вы не «определяете» переменные как определенный тип.Пример:
$a=1;
$a='1';
$a=true;
$a=doSomething();
Каждая переменная имеет другой тип, но вы можете знать тип перед выполнением (см. 4-ую).Для сравнения, другие языки используют:
int a=1;
String s="1";
bool a=true;
something a=doSomething();
В последнем примере вы должны принудительно установить тип переменной (в качестве примера я использовал тип данных «что-то»).
Еще одна «проблема», почему перегрузка функций невозможна в PHP: PHP имеет функцию func_get_args (), которая возвращает массив текущих аргументов, теперь рассмотрим следующий код:
function hello($a){
print_r(func_get_args());
}
function hello($a,$a){
print_r(func_get_args());
}
hello('a');
hello('a','b');
С учетом обеих функцийпринять любое количество аргументов, какой из них должен выбрать компилятор?
Наконец, я хотел бы указать, почему приведенные выше ответы частично неверны; функция перегрузка / переопределение НЕ равна метод перегрузка / переопределение.
Где метод похож на функцию, но специфичен для класса, и в этом случае PHP делаетразрешить переопределение в классах, но опять же без перегрузки, из-за языковой семантики.
В заключение, языки, подобные Javascript, допускают переопределение (но, опять же, без перегрузки), однако они также могут показывать разницу между переопределением пользовательской функции иметод:
/// Function Overriding ///
function a(){
alert('a');
}
a=function(){
alert('b');
}
a(); // shows popup with 'b'
/// Method Overriding ///
var a={
"a":function(){
alert('a');
}
}
a.a=function(){
alert('b');
}
a.a(); // shows popup with 'b'