Procedente de fondo C ++;)
¿Cómo puedo sobrecargar las funciones de PHP?
¿Una definición de función si hay argumentos y otra si no hay argumentos? ¿Es posible en PHP? ¿O debería usar if else para verificar si hay algún parámetro pasado de $ _GET y POST? y relacionarlos?
php
arguments
overloading
Vamsi Krishna B
fuente
fuente
overloading
, de lo que se pregunta en la pregunta. (Vea la respuesta aceptada para más detalles.)Respuestas:
No puede sobrecargar las funciones de PHP. Las firmas de funciones se basan solo en sus nombres y no incluyen listas de argumentos, por lo que no puede tener dos funciones con el mismo nombre. La sobrecarga del método de clase es diferente en PHP que en muchos otros lenguajes. PHP usa la misma palabra pero describe un patrón diferente.
Sin embargo, puede declarar una función variadic que tome un número variable de argumentos. Usaría
func_num_args()
yfunc_get_arg()
para obtener los argumentos aprobados, y usarlos normalmente.Por ejemplo:
fuente
myFunc(/*...*/)
.PHP no admite la sobrecarga de métodos tradicionales, sin embargo, una forma de lograr lo que desea sería utilizar el
__call
método mágico:fuente
__call()
antes. ¡Bastante creativo (aunque un poco detallado)! +1Para sobrecargar una función, simplemente pase el parámetro como nulo de forma predeterminada,
fuente
overload
una función; sin embargo, usted hace un punto útil que los lectores deben tener en cuenta.Puede ser difícil para algunos, pero aprendí de esta manera por cómo Cakephp realiza algunas funciones y lo he adaptado porque me gusta la flexibilidad que crea
La idea es que tenga diferentes tipos de argumentos, matrices, objetos, etc., luego detecte lo que le pasó y vaya desde allí
fuente
fuente
¿Qué hay de esto?
fuente
En PHP 5.6 puede usar el operador splat
...
como último parámetro y eliminarfunc_get_args()
yfunc_num_args()
:También puede usarlo para descomprimir argumentos:
Es equivalente a:
fuente
fuente
PHP no admite sobrecarga por ahora. Espero que esto se implemente en las otras versiones, como otros lenguajes de programación.
Echa un vistazo a esta biblioteca, esto te permitirá utilizar la sobrecarga de PHP en términos de cierres. https://github.com/Sahil-Gulati/Overloading
fuente
Lamentablemente, no hay sobrecarga en PHP como se hace en C #. Pero tengo un pequeño truco. Declaro argumentos con valores nulos predeterminados y los verifico en una función. De esa manera, mi función puede hacer cosas diferentes dependiendo de los argumentos. A continuación se muestra un ejemplo simple:
fuente