La mia applicazione ha alcune opzioni di configurazione di alto livello come le directory che verranno utilizzate per varie cose, le informazioni sulla connessione al database e alcune altre impostazioni richieste per l'esecuzione dell'applicazione.
Sto discutendo con me stesso se le costanti sono o meno meglio delle variabili per questo scopo e vorremmo qualche input.
Avendo:
$config = new Config;
new Whatever($config->foo, $config->bar);
Invece di:
new Whatever(Config::FOO, Config::BAR);
Ottengo il potere del polimorfismo, posso rapidamente scambiare le impostazioni di configurazione istanziando $ config come una classe diversa con gli stessi membri della classe.
Ovviamente c'è un compromesso qui. Qualunque cosa abbia bisogno delle opzioni di configurazione deve istanziare un oggetto $ config, usare la memoria e creare un codice extra e renderlo così le opzioni di configurazione non sono immutabili a lungo.
Il problema dell'immutabilità potrebbe essere risolto con un metodo, ad es. $ Config > get ( 'foo'); quindi è potenzialmente un non-problema, anche se aggiunge alla verbosità e una chiamata al metodo è più costosa della lettura di una costante o di una variabile.