Avete ragione ragazzi, è solo che ho la paura che mi perdo e non so poi spiegare il perchè..
Sul vostro suggerimento oggi mi sono messo a creare 2 classi: Libro e Libreria ed ho fatto un po' di prove, tentando anche di complicarmi un po' la vita fino ad arrivare a questo punto in cui vi chiedo un'illuminazione.
Il codice è abbastanza lungo anche perchè ho fatto tante prove semplici per vedere se tutto funzionava bene.
Arrivo al problema:
Se ho in una classe Liberia una proprietà inizializzata $libroc con l'oggetto di un'altra classe Libro.
Io posso andare a richiamare in questa classe Libreria una proprietà/metodo statico della classe Libro tramite $libroc?
L'errore lo si ha alla fine del codice Libreria, con la definizione della funzione leggitutto()
Dove appunto io voglio andare a modificare la quantità che avevo settato in precedenza (60) e la voglio andare a raddoppiare.
In questa funzione sono riuscito ad utilizzare l'oggetto passato come parametro per richiamare i vari metodi (statici e non) della classe Libro, ma tramite la proprietà della classe Libreria invece non sono riuscito a richiamare il metodo statico della classe Libro
Questa è la classe Libro
Codice PHP:
class Libro {
private $tipo;
private $titolo;
private $prezzo;
private static $qta;
public function __construct($tipologia,$tit,$pr) {
$this-> tipo = $tipologia;
$this-> titolo = $tit;
$this-> prezzo = $pr;
}
public function getPrezzo(){ //getter
return $this->prezzo;
}
public function setPrezzo($pre){
$this->prezzo=$pre;
}
public function getTito(){ //getter leggo il titolo
return $this->titolo; //recupera valore memorizzato nella variabile di classe $titolo
}
public function setTito($tito){ //setter setto il titolo
$this->titolo = $tito; //aggiungo il titolo alla variabile di classe $titolo
}
public function getTipo(){ //getter leggo il tipo
return $this->tipo; //recupera valore memorizzato nella variabile di classe $tipo
}
public function setTipo($tip){ //getter setto la tipologia
$this->tipo=$tip; //aggiungo la tipologia alla variabile di classe $tipo
}
public static function getQta(){ //getter leggo la qta
return self::$qta; //ritorna la proprietà di classe statica $qta
}
public static function setQta($q){ //getter setto la qta
self::$qta=$q; //aggiungo la quantità alla proprietà di classe statica $qta
}
}
Questa è la classe Libreria
Codice PHP:
class Libreria {
private $contiene;
private $nome;
private $indirizzo;
private $prezzo;
private $quantità;
private $libroc;
public function __construct($nom,$indi,$libr) {
$this-> nome = $nom;
$this-> indirizzo = $indi;
$this->libroc=$libr;
}
public function setContiene($libr){
$this->contiene=$libr->getTipo(); }
public function getContiene(){ //getter
return $this->contiene; }
public function aggPrezz($libr,$valore){
$libr->setPrezzo($valore);
$this->prezzo=$libr->getPrezzo();
//tramite oggetto libro richiamo funz della classe libro per settare
//poi sempre tramite l'oggetto libro chiamo la funzione di lettura,
//per memorizzare nella proprietà $prezzo della classe Libreria
}
public function getPrezz(){ //getter
return $this->prezzo; }
//Ora provo funzione statica
public function leggiQta(){ //getter leggo la quantità
return $this->quantità;
//recupera valore memorizzato nella variabile di classe $quantità }
public function impostaQta($libr,$q){ //setter setto la qta
$libr::setQta($q);
$this->quantità=$libr::getQta(); }
public function leggitutto($libr){ //getter leggo tutte le info
if($libr->getTipo()){
$tipointerno=$libr->getTipo();
echo"<br>QUI ABBIAMO UN ".$tipointerno." COME LIBRO<br>";
echo "<br>Il libro che è in libreria è un " .$libr->getTipo();
echo "<br>il titolo del ".$libr->getTipo() ."è il " . $libr->getTito();
echo "<br> abbiamo una quantità di ".$libr::getQta()." copie";
/////////////////////////////VOGLIO RADDOPPIARE LA QUANTITA' (2+60) //////////////////////////
$cisono=2*($this->libroc::getQta());
echo"<br>$cisono<br>";
$this->libroc::setQta($cisono); <-----Mi da ERRORE
echo "abbiamo questa quantità dopo la funzione setQta interna".$this->libroc;
}
}
codice:
$nlibro= new Libro('Rivista','Focus','4');
echo "<br>";
var_dump($nlibro); //stampo l'oggetto $nlibro
$nlibro->setPrezzo(10); //chiamo il setter per settare prezzo
echo "<br>";
echo "il prezzo del libro ora , dopo la modifica, è ";
echo $nlibro -> getPrezzo();
echo "<br>";
echo "tipologia:";
echo $nlibro -> getTipo(); //chiamo il getter per il tipo
echo "<br>";
echo "il titolo del libro è ";
echo $nlibro -> getTito(); //chiamo il getter per il titolo
$nlibro -> setTito('FattoQuotidiano'); //chiamo il setter per settare il titolo
echo "<br>";
echo "il titolo del libro ora , dopo la modifica, è ";
echo $nlibro -> getTito(); //chiamo il getter per il tittolo
$nlibro -> setTipo('quotidiano'); //chiamo il setter per settare la tipologia
echo "<br>";
echo "Modifico la tipologia ed ora il tipo di libro è ";
echo $nlibro -> getTipo(); //chiamo il getter per il tittolo
echo "<br><br>";
var_dump($nlibro);
echo "<br><br>";
echo "il libro che ho al momento è ";
echo$nlibro -> getTipo();
echo " dal titolo : " .$nlibro -> getTito();
echo " ad un prezzo di " .$nlibro -> getPrezzo()." euro ";
Libro::setQta(7);
echo "<br>la quantità del ".$nlibro -> getTipo() ." è "
. Libro::getQta()." copie";
/*USO LIBRERIA*/
echo "<br><br>";
$lia=new Libreria('Del Corso','via Mazzini 25',$nlibro);
echo "stampo oggetto Libreria<br>";
var_dump($lia);
echo "<br><br>";
echo "stampo oggetto Libreria dopo setContiene(oggetto)<br>";
$lia->setContiene($nlibro);
var_dump($lia);
echo "<br><br>";
echo "stampo oggetto Libreria dopo getContiene()<br>";
$lia->getContiene();
var_dump($lia);
echo "<br>";
echo "La Libreria contiene un ".$lia->getContiene(); //PERFETTO
echo "<br>";
echo "<br><br>";
echo "stampo oggetto Libreria dopo getPrezz(oggetto)<br>";
$lia->getPrezz($nlibro);
echo "<br>";
echo "Il prezzo del " .$lia->getContiene();
echo " è ". $lia->getPrezz($nlibro); //PERFETTO
echo "<br>";
$lia->aggPrezz($nlibro,679);
echo "<br><br>";
echo "stampo oggetto Libreria dopo aggPrez(oggetto,prezzo che ci metto) e getPrezz(oggetto)<br>";
$lia->getPrezz($nlibro);
echo "<br>";
echo "Il prezzo del " .$lia->getContiene();
echo " è ". $lia->getPrezz($nlibro)." euro"; //PERFETTO
echo "<br>";
$lia->impostaQta($nlibro, 60);
echo "la quantità del ".$lia->getContiene(). " è "
.$lia->leggiQta()." copie";
/*vado a modificare anche la prorpietà statica di Libro,
* infatti se tramite l'oggetto libro vado a leggere la quantià
* vedo lo stesso valore*/
echo "<br>la quantità del ".$nlibro -> getTipo() ." è "
. Libro::getQta()." copie";
$lia->leggitutto($nlibro);