ciao.
Ho una classe GestoreNegozio che come attributo ha un array.
Questo array contiene oggetti di tipo Negozio
Ogni oggetto Negozio ha come attributo un array di oggetti Dvd
a questo punto....quando aggiungo oggetti Dvd all'oggetto Negozio , se guardo la lunghezza dell'attributo della Negozio vedo che e' stato aggiunto....ma se parto da GestoreNegozio , estraggo l'elemento n corrispondente all'oggetto Negozio (quello sul quale avevo aggiunto un elemento), e controllo quanto e' lungo.....rimane invariato.
Faccio notare che la cosa in php5 funziona benissimo.
Dopo continue provo sono arrivato alla conclusione che l'oggetto Negozio che estraggo dall'attributo della GestoreNegozio è una copia....non e' propriamente quell'oggetto...
Non so e non ho capito bene quando devo anteporre il carattere & davanti agli oggetti.
Spero di essere stato chiaro anche senza codice...
Ma ecco il codice che invito a farvi testare su php4 e su php5 ....noterete i risultati diversi
Codice PHP:
class GestoreNegozio{
var $elencoNegozi;
function GestoreNegozio(){
$this->elencoNegozi = array();
}
function getNegozio($i){
$allNeg = &$this->elencoNegozi;
return $allNeg[$i];
}
function addNegozio($negozio){
$allNeg = &$this->elencoNegozi;
$allNeg[]=$negozio;
}
function countDvd(){
$allNeg = &$this->elencoNegozi;
$cont=0;
for($i=0;$i<count($allNeg);$i++){
$neg=$this->getNegozio($i);
$tot_neg = $neg->countDvd();
$cont= $cont+$tot_neg;
}
return $cont;
}
}
class Negozio{
var $elencoDvd;
function Negozio(){
$this->elencoDvd = array();
}
function getDvd($i){
$allDvd = &$this->elencoDvd ;
return $allDvd[$i];
}
function addDvd($dvd){
$alldvd = &$this->elencoDvd;
$alldvd[]=$dvd;
}
function countDvd(){
$allDvd = &$this->elencoDvd ;
return count($allDvd);
}
}
class Dvd{
function Dvd(){
}
}
$gest = new GestoreNegozio();
$negozio = new Negozio();
$dvd1 = new Dvd();
//aggiungo il negozio al gestore
$gest->addNegozio($negozio);
//estraggo il primo negozio
$neg = $gest->getNegozio(0);
$neg->addDvd($dvd1);
echo "il negozio ha" . $neg->countDvd() . "dvd";
echo "
";
echo "il gestore ha ". $gest->countDvd() . "dvd";
aiuto sono disperato...