vehiculo una sirve que para interfaz interfaces implementación entre ejemplo diferencia clases clase abstractas abstracta php static abstract

php - sirve - Llamar a una función pública estática en una clase abstracta



implementación de clases abstractas (2)

Los métodos estáticos en OOP no cambian el estado interno, por lo tanto, puede llamar a métodos estáticos de una clase abstracta.

Supongo que esta pregunta está más orientada hacia los geeks del lenguaje. Tengo la siguiente clase:

<?php abstract class ScopeFactory { public static function doStuff() { } }

Ahora, puedo llamar a esta función, así:

ScopeFactory::doStuff()

Y esto funciona felizmente Siempre codifiqué con la impresión de que las clases abstract no podían usarse directamente, y tienen que implementarse en una clase concreta para poder llamarse.

Mi impresión de static es que no requiere que una instancia sea ​​invocable.

¿Podría alguien explicarme por qué esto es legal y si debería ser así? Tengo curiosidad por los detalles más finos.


Me sorprendería si esto no fuera permitido. La clase abstracta asume que no puedes crear una instancia. Como los métodos estáticos no necesitan una instancia de clase, puede usarlos con mucho gusto.

Mirando más profundo, podría crear un método estático abstracto y llamarlo desde su método no abstracto:

abstract class ScopeFactory { public static function doStuff() { static::otherStuff(); } abstract public static function otherStuff(); }

PHP le dará un error fatal al decir que no puede llamar a un método abstracto. Pero también le dará una advertencia E_STRICT diciendo que no debe crear métodos estáticos abstractos.