Constant Interface antipattern - PHP

7

Mi sono imbattuto in questo articolo di Wikiepedia che afferma che l'utilizzo di interfacce per la definizione delle costanti non è una buona cosa.

La soluzione suggerita è quella di definire le costanti in una classe finale e utilizzare l'importazione statica. Questo funziona per Java. Vengo dal mondo PHP che non ha la cosa "importare". Quindi, qual è la soluzione accettabile per PHP?

    
posta Srisa 25.02.2011 - 15:38
fonte

3 risposte

3

Utilizza solo costanti di classe .

class ConstClass
{
    const SOME_CONSTANT = 10;
}

echo ConstClass::SOME_CONSTANT;

A partire da PHP5, anche la parola chiave finale è supportata.

    
risposta data 25.02.2011 - 15:45
fonte
2

Ti stai riferendo a un articolo che dice

In the Java programming language, the constant interface pattern describes the use of an interface solely to define constants, and having classes implement that interface in order to achieve convenient syntactic access to those constants. However, since constants are very often merely an implementation detail, and the interfaces implemented by a class are part of its exported API, this practice amounts to putting implementations details into the API, which is considered inappropriate. In general, collecting system constants into classes independent of behaviour, might create a poor object-oriented design, because it is often a sign of low cohesion. It is for these reasons that implementing constants interfaces is considered to be an anti-pattern.

Vengo da Java e sto facendo PHP in questo momento ... Dal mio punto di vista, finché usi costanti dell'interfaccia che sono di natura interna al sistema, stai bene ... una volta che inizi a esporre le costanti dell'interfaccia come parte dell'API esterna, devi farlo usando le classi e non le interfacce.

Un'altra cosa da considerare è la serializzazione e i pacchetti di distribuzione. Se sono necessarie costanti come parte del pacchetto di distribuzione per abilitare una deserializzazione senza errori, ricordare: È possibile aggiungere dettagli di implementazione in classi, ma non in interfacce.

Purtroppo, PHP solo sa pubblico, protetto e privato per controllare lo spazio dei nomi e per controllare l'ambito delle costanti. In Java hai il pacchetto privato in cima, che in pratica dice "nella stessa directory" / "pacchetto java de. *".

Ricorda questo quando paragona Java ad altre lingue e prendi conclusioni riguardo ai modelli di formiche che si riferiscono a OODesign in generale e attraverso le lingue. Può portare a conclusioni sbagliate ;-) ...

Non dico che l'articolo di wikipedia sia sbagliato ... ma non è corretto al 100%.

Solo i miei 2 € cent.

    
risposta data 18.12.2012 - 09:24
fonte
1

Importa la classe =)
No, non c'è "importazione" in PHP, ma devi includere i file sorgente per le classi in qualche modo . Basta includere la classe di definizione costante.

Suggerisco di rendere la classe astratta e utilizzare costanti di classe .

    
risposta data 25.02.2011 - 15:48
fonte

Leggi altre domande sui tag