En PHP, ¿qué quiere decir con sobrecarga de funciones y anulación de funciones? y cual es la diferencia entre ambos? no podía entender cuál es la diferencia entre ellos.
php
overloading
overriding
Parag
fuente
fuente
Respuestas:
La sobrecarga es definir funciones que tienen firmas similares, pero que tienen parámetros diferentes. La anulación solo es pertinente para las clases derivadas, donde la clase principal ha definido un método y la clase derivada desea anular ese método.
En PHP, solo puedes sobrecargar métodos usando el método mágico
__call
.Un ejemplo de anulación :
fuente
__call
.La sobrecarga de funciones ocurre cuando define el mismo nombre de función dos veces (o más) usando un conjunto diferente de parámetros. Por ejemplo:
En el ejemplo anterior, la función
compute
está sobrecargada con dos firmas de parámetros diferentes. * Esto aún no es compatible con PHP. Una alternativa es usar argumentos opcionales:La anulación de funciones ocurre cuando extiende una clase y reescribe una función que existía en la clase primaria:
Por ejemplo,
compute
anula el comportamiento establecido enAddition
.fuente
Subtraction
clase ampliaría laAddition
clase. :)Estrictamente hablando, no hay diferencia, ya que tampoco puedes hacerlo :)
La anulación de funciones podría haberse realizado con una extensión PHP como APD, pero está en desuso y la última versión de afaik no se podía usar.
La sobrecarga de funciones en PHP no se puede realizar debido a la tipificación dinámica, es decir, en PHP no "define" las variables para que sean de un tipo en particular. Ejemplo:
Cada variable es de un tipo diferente, sin embargo, puede conocer el tipo antes de la ejecución (consulte la cuarta). Como comparación, otros idiomas usan:
En el último ejemplo, debe establecer con fuerza el tipo de variable (como ejemplo, usé el tipo de datos "algo").
Otro "problema" por el que la sobrecarga de funciones no es posible en PHP: PHP tiene una función llamada func_get_args (), que devuelve una matriz de argumentos actuales, ahora considere el siguiente código:
Considerando que ambas funciones aceptan cualquier cantidad de argumentos, ¿cuál debería elegir el compilador?
Finalmente, me gustaría señalar por qué las respuestas anteriores son parcialmente incorrectas; la sobrecarga / anulación de la función NO es igual a la sobrecarga / anulación del método .
Cuando un método es como una función pero específico de una clase, en cuyo caso, PHP permite anular en las clases, pero nuevamente no sobrecargar, debido a la semántica del lenguaje.
Para concluir, los lenguajes como Javascript permiten anular (pero de nuevo, no sobrecargar), sin embargo, también pueden mostrar la diferencia entre anular una función de usuario y un método:
fuente
Ejemplo de sobrecarga
fuente
Aunque el paradigma de sobrecarga no es totalmente compatible con PHP, se puede lograr el mismo efecto (o muy similar) con los parámetros predeterminados (como alguien mencionó anteriormente).
Si define su función de esta manera:
Cuando llamas a esta función como:
obtendrá una funcionalidad (# 1), pero si la llama con parámetros como:
Obtendrá otra funcionalidad (# 2). Ese es el efecto de la sobrecarga: una funcionalidad diferente según los parámetros de entrada de la función.
Lo sé, alguien preguntará ahora qué funcionalidad obtendrá uno si llama a esta función como f (0).
fuente
Me gustaría señalar aquí que la sobrecarga en PHP tiene un significado completamente diferente en comparación con otros lenguajes de programación. Mucha gente ha dicho que la sobrecarga no es compatible con PHP y, según la definición convencional de sobrecarga, sí, esa funcionalidad no está explícitamente disponible.
Sin embargo, la definición correcta de sobrecarga en PHP es completamente diferente.
En PHP, la sobrecarga se refiere a la creación dinámica de propiedades y métodos utilizando métodos mágicos como __set () y __get (). Estos métodos de sobrecarga se invocan al interactuar con métodos o propiedades que no son accesibles o no se declaran.
Aquí hay un enlace del manual de PHP: http://www.php.net/manual/en/language.oop5.overloading.php
fuente
La sobrecarga de métodos ocurre cuando dos o más métodos con el mismo nombre de método pero diferente número de parámetros en una sola clase. PHP no admite la sobrecarga de métodos. La anulación de métodos significa dos métodos con el mismo nombre de método y el mismo número de parámetros en dos clases diferentes significa clase primaria y clase secundaria.
fuente
Hay algunas diferencias entre la sobrecarga y la anulación de funciones, aunque ambas contienen el mismo nombre de función. En sobrecarga, entre las mismas funciones de nombre contienen diferentes tipos de argumento o tipo de retorno; tales como: "function add (int a, int b)" & " función add (float a, float b); aquí la función add () está sobrecargada. En el caso de anular tanto el argumento como el nombre de la función son los mismos. Generalmente se encuentra en herencia o en rasgos. Tenemos que seguir algunas tácticas para introducir , qué función se ejecutará ahora. Entonces, al anular el programador, se siguen algunas tácticas para ejecutar la función deseada, donde en la sobrecarga el programa puede identificar automáticamente la función deseada ... ¡Gracias!
fuente
Sobrecarga: en el mundo real, la sobrecarga significa asignar algunas cosas adicionales a alguien. Como en el mundo real, la sobrecarga en PHP significa llamar a funciones adicionales. De otra manera, puede decir que tiene una función más delgada con diferentes parámetros. En PHP puede usar la sobrecarga con funciones mágicas, por ejemplo, __get, __set, __call, etc.
Ejemplo de sobrecarga:
Anulación: en la programación orientada a objetos, la anulación es reemplazar el método principal en la clase secundaria. En la anulación, puede volver a declarar el método de la clase primaria en la clase secundaria. Entonces, básicamente, el propósito de anular es cambiar el comportamiento de su método de clase padre.
Ejemplo de anulación:
fuente
PHP 5.xx no admite sobrecarga, por eso PHP no es completamente OOP.
fuente