Estoy bajo la interpretación de que si necesito acceder a un método estáticamente, debería hacer que la clase sea abstracta solo si nunca la necesitaré instanciada. ¿Es eso cierto?en PHP, ¿cuándo debería usar métodos estáticos frente a clases abstractas?
Respuesta
No estoy seguro de la pregunta. Los métodos estáticos son bastante diferentes de las clases abstractas. Por lo general, creará una clase abstracta si no desea crear una instancia de clase, pero espera que se creen instancias de subclases. El uso de clases abstractas puede ser muy útil para crear una clase parcialmente implementada donde las subclases completarán el resto de los métodos para implementar completamente la clase.
Una clase llena de métodos estáticos puede declararse abstracta si desea evitar el uso de la clase, pero en general diría que si marca un resumen de clase, debería poder encontrar clases que amplíen la clase. Si tengo una clase que está llena de métodos estáticos I , no la etiquete como como abstracta porque nadie la subclasificará, y generalmente agrega confusión. Preferiría que se llamara una clase estática, no abstracta.
PHP no tiene un identificador estático en las clases, por lo que se necesitan otros métodos para evitar que se cree una instancia.
Puede evitar que una clase sea instanciada definiéndola como abstracta, y es una forma económica de hacerlo, aunque ese no es el propósito de una clase abstracta.
Otros métodos incluyen la definición del contructor privada
private function __construct() {}
o lanzar una excepción en el contructor si desea dar un mensaje más significativo en cuanto a porqué no se pueden crear instancias.
function __construct() { throw new Exception('This is a static class'); }
Si no desea que la clase subclase declare la clase final.
final class foo { }
O en el caso raro que desea ser capaz de subclase, pero no permiten que cualquiera de sus hijos para crear instancias de declarar la final constructor. (Situación extraída, pero para completar)
final private function __construct() {}
- 1. ¿Cuándo debería usar métodos públicos/privados/estáticos?
- 2. Cuándo usar clases y métodos estáticos?
- 3. ¿Cuándo debería escribir métodos estáticos?
- 4. php clases e interfaces abstractas que implican métodos estáticos?
- 5. métodos estáticos abstractas en Scala
- 6. ¿Mocking métodos públicos no estáticos en clases abstractas con JMockit?
- 7. Cuándo usar interfaces o clases abstractas? Cuándo usar ambos?
- 8. Funciones frente a métodos estáticos
- 9. En Objective-C, ¿cuándo debería usar métodos de clase y cuándo debería usar métodos de instancia?
- 10. Interfaces vs. clases abstractas
- 11. Métodos estáticos en clases genéricas?
- 12. Métodos estáticos en PHP
- 13. ¿Cuándo debería usar call() frente a invocar la función directamente?
- 14. Cuándo usar el modificador estático en PHP
- 15. Métodos estáticos: cuándo y cuándo no
- 16. debería nombrar todas mis clases abstractas AbstractFoo
- 17. Alternativas a clases abstractas en Ruby?
- 18. Debería preferir los métodos estáticos en C#
- 19. PHP llegar métodos estáticos
- 20. php métodos estáticos pregunta
- 21. PHP: memory_get_peak_usage (falso), ¿cuándo debería usar true?
- 22. ¿Cuándo debería usar stdClass y cuándo debería usar una matriz en php oo?
- 23. Cuándo usar clases estáticas vs instanciadas
- 24. ¿Cuándo debería usar CompiledQuery?
- 25. Grandes clases base abstractas
- 26. Desventajas de los métodos estáticos en PHP
- 27. ventajas de usar un clases abstractas vs. clase regular
- 28. ¿Cuándo debería usar _aligned_malloc()?
- 29. ¿Cuándo debería usar semáforos?
- 30. ¿Cuándo debería usar # en ColdFusion?
Definitivamente; la semántica de abstracto versus tener un constructor privado es muy diferente, y usar la correcta da una pista fuerte a cualquiera que lea el código sobre cómo se usa la clase. – Rob