Newsgroup: it.comp.www.php
Titolo: Valori in configurazione

Ciao a tutti,
vorrei sapere una vostra opinione su questo tema:
quando avete una serie di valori da mettere in configurazione a delle
pagine web, quale approccio usate:
- define  (e quindi costanti readonly e che possono essere
  solo string e number)
- $GLOBAL (array globale di variabili di qualunque tipo)
- $CONFIG (array di varibili che bisogna settare come global
  per dargli scope nelle funzioni)
- altro...
cosa fate e perche'?

 pagine web, quale approccio usate:
Ultimamente, una classe statica con metodo statico get().
In ogni punto del software posso fare
print Config::get("site_title");
Naturalmente uso l'autoloading di PHP5 per caricare automaticamente
Config.php
L'implementazione interna, poi, varia. Puo` essere un array statico o, al
primo get, la lettura di un file .ini o simile.
Bye.

 primo get, la lettura di un file .ini o simile.
Ok, ho tragicamente dimenticato di dire con supporto PHP 4.x :(
Grazie per la risposta

> cosa fate e perche'?
con PHP 4.x ?

 Ok, ho tragicamente dimenticato di dire con supporto PHP 4.x :(
Funziona anche in PHP4, devi solo ricordarti di includere la classe ad
ogni pagina.
ye.

 pagine web, quale approccio usate:
Come Alessandro (cioè con una classe), tranne per il fatto che invece
di usare
get("..")
uso direttamente
getNomeAttributo();
Lo preferisco al "get('...')" perchè ho una visualizzazione degli
errori in fase di scrittura del codice.
Ciao,
   Fabrizio
=== 
http://www.negusweb.it
 ===



Se deve essere globale e quindi unica per tutta l'applicazione, senza  
possibilità di cambiarla, sono tutte equivalenti.
L'alternativa di Alessandro si unisce alle altre ed è estremamente simile  
nella filosofia.
Sommarizzando:
- costanti
- $GLOBALS
- variabili globali ( costrutto global )
- classe statica. config::get( 'nomevar' );
- ce ne metto un'altra, una funzione. get_config_var( 'nomevar' )
Le ultime due su tutte aggiungono la possibilità di inserire del codice  
per processare la richiesta, che non è male (anche se è meglio non abusare  
della possibilità).
La classe statica ha il vantaggio, sulla funzione di saturare meno il  
namespace (intendo che nel momento in cui tu abbia bisogno di un'altra  
funzione che riguarda la configurazione potresti metterla nella stessa  
classe, con meno problemi di conflitti di nome con altre librerie (cioè la  
possibilità che nel resto del codice esista qualcosa con lo stesso nome)  
). E anche in quel caso, il fatal error di php di metterebbe subito sul  
chi va là.
Tra tutte quindi direi la classe statica. (si, funziona anche con php4,  
non preoccuparti)
Tac
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

 primo get, la lettura di un file .ini o simile.
ecco è questo che mi era sfuggito, mi sembra di capire il discorso
dell'array statico (se pero' è definito in get), invece non capisco il
discorso del primo get...
non capisco, dove salva i risultati un classe chiamata in maniera statica
non potendo "utilizzare" $this...
mi puoi fare un esempio?
credo che mi manchi qualche nozione sulle classi...

> Tra tutte quindi direi la classe statica. 
Non capisco un cosa, con "classe statica" si intende un classe non
istanziata e richiamata con l'operatore ::  ?
Se sě e se non sbaglio non si puo' registrare dei valori nella classe da
richiamare in seguito, o questi sono definiti nel metodo richiamato o al
limite il metodo puo' richiamare dei global...
Mi sfugge qualcosa?

 Mi sfugge qualcosa?
Si`, gli attributi statici. :)
class test {
  static $a = 0;
  static function add()
  {
    test::$a++;
    return test::$a;
  }
}
print test::add();
print test::add();
Questo stampa "12".
Bye.

 Questo stampa "12".
ora mi č tutto chiaro.
mi sa' che d'ora in avanti faro' cosě anch'io
ciao e grazie

 ciao e grazie
Come non detto
mi funziona su php5 ma non su 4
:(

 mi funziona su php5 ma non su 4
In PHP4 e` piu` rognoso, perche` la OOP e` piu` arretrata, ma puoi girarci
intorno in qualche modo, per esempio con una variabile statica nella
funzione invece che nella classe:
class test {
  function add()
  {
    static $a;
    $a++;
    return $a;
  }
}
print test::add();
print test::add();
Naturalmente non potrai usare la stessa variabile statica da altri metodi
della classe o da fuori dalla classe, quindi devi prendere le contromisure
adeguate.
Bye.

 adeguate.
ok, capito
grazie

 ciao e grazie
Occhio all'ereditarietà, che funziona in maniera differente tra php4 e 5  
può indurre in errore (e non si capisce quale dei due faccia la cosa  
giusta).
Ad ogni modo (stavo per postare l'esempio ieri sera, poi ho visto la data  
del post e pensavo non interessasse piu'):
//non testato, magari non funziona
class Config
{
	function _getConfig()
	{
		static $config;
		if ( is_null( $config ) )
		{
			//metti qui il caricamento dei parametri.			
			$config = $data; //facendo conto che la variabile data contenga i  
valori caricati
		}
		return $config;
	}
	function get( $key )
	{
		$config = Config::_getConfig();
		return $config[ $key ];
