Me pregunto si una de las características clave de un lenguaje de programación es tener la capacidad de sobrecargar funciones mediante argumentos. Creo que es esencial en el contexto de la programación orientada a objetos.
¿Se deja intencionalmente atrás y no se permite? ¿O la sobrecarga no es una buena práctica?
php
method-overloading
usuario1179459
fuente
fuente
Respuestas:
¿Quién te dijo que PHP no admite la sobrecarga de funciones?
En realidad, PHP admite la sobrecarga de funciones, pero de una manera diferente. Las características de sobrecarga de PHP son diferentes de las de Java:
Verifique los siguientes bloques de código.
Función para encontrar la suma de n números:
Función para agregar dos números o para concatenar dos cadenas:
Enfoque orientado a objetos, incluida la sobrecarga de métodos:
Ref: http://php.net/manual/en/language.oop5.overloading.php
En PHP, medios sobrecarga puede agregar miembros de objetos en tiempo de ejecución, mediante la implementación de algunos de los métodos mágicos como
__set
,__get
,__call
etc.fuente
findSum(10, "steve", { 86, "2012-09-20" });
. Una verdadera sobrecarga permitiría nuevos parámetros de diferentes tipos.No es un soporte completo de "sobrecarga tradicional", solo parcial .
Nota: la segunda parte de esta definición generalmente se asocia con lenguajes de programación de tipo estático que hacen verificación de tipo y / o verificación de aridad , para elegir la declaración correcta. PHP no es un lenguaje de tipo estático, es dinámico y utiliza un tipo de letra débil .
APOYO PHP :
SÍ, proporciona la capacidad de llamar a varios métodos con el mismo nombre pero con diferentes cantidades . Ver func_get_args y @rajukoyilandy respuesta, podemos usar
f(x)
yf(x,y)
.SÍ, proporciona la capacidad de llamar a varios métodos con el mismo nombre pero con diferentes tipos . Se uso interno de gettype en el método.
NO proporciona la capacidad de declarar múltiples métodos con el mismo nombre pero diferentes cantidades . Esto se debe a que podemos llamar
f(x)
yf(x,y)
con la mismaf
declaración.NO proporciona la capacidad de declarar múltiples métodos con el mismo nombre pero con diferentes tipos . Esto se debe a que el compilador PHP debe interpretar
f($integer,$string)
como la misma función quef($string,$integer)
.Consulte también la documentación de sobrecarga de PHP5 para las explicaciones de "sobrecarga no tradicional".
fuente