2009-10-07 10 views

Respuesta

3

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.

+0

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

6

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() {} 
Cuestiones relacionadas