Antes de responder a esta pregunta, debe tener una definición clara de qué es exactamente una clase abstracta, un método abstracto y un método estático.
Clase abstracta: en el paradigma de programación orientada a objetos, la abstracción se refiere al proceso de ocultar los detalles internos de implementación de cualquier programa y solo mostrar la funcionalidad del programa al usuario. Las clases abstractas son una forma de lograr esto. Una clase abstracta es cualquier clase que no se puede instanciar (es decir, no se pueden crear objetos) y se debe ampliar (heredar) para crear objetos. La palabra clave ‘abstracto’ se utiliza para crear clases abstractas.
Método abstracto: un método abstracto es un método que solo se puede declarar y no definir. Se define en la clase que hereda de esta clase.
Método estático: Un método estático de cualquier clase es un método que se crea una sola vez. Esto significa que incluso si crea cientos de objetos de una clase con métodos estáticos, habrá una única copia de cada método estático.
Considere el siguiente ejemplo:
abstract class Abstract_Parent { static function X() { self::Y(); } abstract static function Y(); } class Child extends Abstract_Parent { static function Y() { echo "GeeksforGeeks"; } } Child::X();
Ahora, si ejecuta este código PHP, verá el error: » Error fatal de PHP: no se puede llamar al método abstracto Abstract_Parent::X() «.
Cuando llamamos al método X() en la clase secundaria, se llama a la función estática X() en la clase principal. En el método X(), estamos llamando nuevamente a la función Y(), que es una función estática abstracta . El Y() que la función X() intenta llamar es la clase principal Y(), que es en sí misma una función abstracta.
Por lo tanto, usar abstracto y estático en el mismo método anula el otro propósito. Esta es la razón por la cual PHP 5.2+ no permite métodos abstractos de clase estática.
Publicación traducida automáticamente
Artículo escrito por alokesh985 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA