Constant Interface antipattern - PHP

7

Encontré este artículo de Wikiepedia que dice que el uso de interfaces para definir constantes no es algo bueno.

La solución sugerida es definir las constantes en una clase final y usar la importación estática. Eso funciona para Java. Vengo del mundo de PHP que no tiene la "importación". Entonces, ¿cuál es la solución aceptable para PHP?

    
pregunta Srisa 25.02.2011 - 15:38

3 respuestas

3

Simplemente use constantes de clase .

class ConstClass
{
    const SOME_CONSTANT = 10;
}

echo ConstClass::SOME_CONSTANT;

A partir de PHP5, la palabra clave final también es compatible.

    
respondido por el Steven Jeuris 25.02.2011 - 15:45
2

Te refieres a un artículo que dice

  

En el lenguaje de programación Java, el patrón de interfaz constante   describe el uso de una interfaz únicamente para definir constantes, y   Tener clases implementar esa interfaz con el fin de lograr conveniente   Acceso sintáctico a esas constantes. Sin embargo, ya que las constantes son muy   a menudo simplemente un detalle de implementación, y las interfaces implementadas   por una clase son parte de su API exportada, esta práctica equivale a   Poner detalles de implementaciones en la API, que se considera   inadecuado. En general, la recopilación de constantes del sistema en   clases independientes del comportamiento, podría crear un pobre orientado a objetos   Diseño, porque suele ser un signo de baja cohesión. Es para estos   razones por las que la implementación de interfaces constantes se considera un   anti-patrón.

Vengo de Java, y estoy haciendo PHP en este momento ... Desde mi punto de vista, mientras use las constantes de interfaz que son de naturaleza interna del sistema, estará bien ... una vez que comience a exponer sus constantes de interfaz como parte de su API externa, deberá hacer eso usando clases y no interfaces.

Otra cosa a considerar es la serialización y los paquetes de implementación. Si necesita constantes como parte del paquete de implementación para habilitar una desinstalación sin errores, recuerde: Puede agregar detalles de implementación en clases, pero no en interfaces.

Lamentablemente, PHP solo sabe público, protegido y privado para controlar el espacio de nombres y para controlar el alcance de las constantes. En Java tienes un paquete privado en la parte superior, que básicamente dice "en el mismo directorio" / "java package de. *".

Recuerde esto cuando compare Java con otros lenguajes y saque conclusiones con respecto a los patrones de anti- que se refieren a OODesign en general y en todos los idiomas. Puede llevar a conclusiones erróneas ;-) ...

No digo que el artículo de wikipedia esté mal ... pero tampoco es 100% correcto.

Sólo mi céntimo de 2 €

    
respondido por el Wizard Of Tech 18.12.2012 - 09:24
1

Importas la clase =)
No, no hay "importación" en PHP, pero debe incluir los archivos de origen para sus clases de alguna manera . Solo incluye la clase de definición constante.

Sugiero hacer la clase abstracta y usar constantes de clase .

    
respondido por el Gipsy King 25.02.2011 - 15:48

Lea otras preguntas en las etiquetas