Newsgroup: it.comp.www.php
Titolo: array associativo come proprietà di una c lasse

Dopo aver abbandonato php per qualche anno, per motivi lavorativi (mi 
toccava usare asp :D), mi sono adesso riavvicinato a php5, perchè ha un 
supporto decente per gli oggetti (che *adoro* :D), e sto smanettando un 
pò. Ma mi trovo di fronte ad un problema, e non riesco a capire se sono 
io che sbaglio e dove, oppure se sia proprio impossibile fare quello che 
voglio (anche se mi sembra improbabile).
Vengo al dunque. Ho creato una classe "configuration" che deve contenere 
un insieme di chiavi e valori (una volta risolto questo problema vorrei 
implementarla staticamente, che ha più senso). Il codice è questo:
class configuration
{
	private $configuration;
	public function __construct()
	{
		$this->$configuration["title"] = "Titolo";
		$this->$configuration["subtitle"] = "Sottotitolo";
	}
	public function getParam($key)
	{
		return $this->$configuration[$key];
	}
}
$configurazione = new configuration();
print($configurazione->getParam("title"));
Mi aspettavo che l'istruzione print stampasse la stringa "Titolo", 
invece stampa "Sottotitolo". Per essere più precisi, ho fatto altre 
prove, e il valore restituito da getParam(); è sempre l'ultimo inserito 
nell'aray, indipendentemente dal parametro $key fornito. Sembra che php 
ignori le quadre ed il loro contenuto, e tratti $configuration come una 
variabile a singolo valore, e non come un array. Pensando che fosse un 
problema di inizializzazione dell'array ho fatto le seguenti prove:
--> private $configuration = array(); -- Non cambia niente
--> private $configuration[]; -- Restituisce l'errore: "Parse error: 
parse error, unexpected '[', expecting ',' or ';' in 
c:\programmi\wamp\www\dyvy\classtest.php on line 5"
Insoddisfatto del risultato :D ho allora rimesso "private 
$configuration;" e ho aggiunto all'inizio del costruttore 
"$this->$configuration = array();", senza ottenere alcun cambiamento.
Quindi la domanda è: ho sbagliato qualcosa? oppure non è proprio 
possibile impostare un array come proprietà di una classe (che ripeto mi 
sembra improbabile quanto stupido).
La piattaforma che sto usando è Windows XP Professional, Apache 1.3.31, 
Php 5.0.0.
Grazie in anticipo per l'aiuto :)
Ivan

Premetto che io utilizzo php 4 e per quanto riguarda la versione 5 ho letto
molto ma non ho ancora fatto niente!
In teoria hai messo dei dollari di troppo!  ;-)
Ti riporto il codice corretto:
class configuration
{
private $configuration;
public function __construct()
{
$this->configuration["title"] = "Titolo";
$this->configuration["subtitle"] = "Sottotitolo";
}
public function getParam($key)
{
return $this->configuration[$key];
}
}
$configurazione = new configuration();
print($configurazione->getParam("title"));
Spero che questo risolva il tuo problema (l'ho corretto "al volo" senza
provarlo!)
Ciao
    Andrea

 (...)
Funziona... grazie mille! :)
Ciao
Ivan

 	}
meglio:
 	public function getParam ($key) {
		if (isset ($this->configuration[$key])) {
 			return $this->configuration[$key];
		}
		return false;
 	}
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
L'uomo, conscio di sbagliare, persevera.