Certo che viene 'eseguita', una sola volta. Ma nel tuo codice mancava il metodo statico per 'eseguire' il codice del __construct. Confronta il tuo codice con quello dell'articolo che citi di html.it e vedrai.Effettivamente, essendo private, la construct non viene mai eseguita. Me ne rendo conto adesso![]()
L'utilizzo che vorresti é perfetto.Come dicevo sopra:
- avere proprietà 'globali', per snellire il codice e non dover stare a passare sempre istanze o altro (per la classe Configurazione o quella MySQL)
- avere metodi 'globali', raggiungibili da dovunque.
- mantenere una sola istanza delle classi, in modo da fare riferimento (x es.) sempre alla stessa Configurazione
In pratica il fine è l'ottenimento di 'librerie' piuttosto che 'oggetti'.
Ad esempio potresti salvare tutta la configurazione del tuo sito in un file .ini o xml o quello che vuoi e accedervi in questo modo
E richiamare ogni variabile di configurazione in questo modo:Codice PHP:class Settings {
private static $instance;
private $settings;
private function __construct() {
$ini_file = "settings.ini";
$this->settings = parse_ini_file($ini_file, true);
}
public static function getInstance() {
if(! isset(self::$instance)) {
self::$instance = new Settings();
}
return self::$instance;
}
public function __get($setting) {
if(array_key_exists($setting, $this->settings)) {
return $this->settings[$setting];
} else {
foreach($this->settings as $section) {
if(array_key_exists($setting, $section)) {
return $section[$setting];
}
}
}
}
}
Il file settings.ini sará qualcosa tipoCodice PHP:$config = Settings::getInstance();
var_dump($config); //ecco il risultato
[environment]
root = /var/path/to/
[mysql]
host = localhost
user = user
etc.

Rispondi quotando