44 OOP Oggetti 2 metodo getter e setter
Dato il precedente codice di stampa cliente/prezzo aggiungiamo un controllo per un prezzo fissato fino ad una certa data, altrimenti lo cambiamo. Innanzitutto la classe io di sevizio
class io { static $nl="<br />"; static function linea($carattere, $quanti) { return str_repeat($carattere, $quanti); } static function saltaRighe($quanti) {echo str_repeat(self::$nl, $quanti);} }
Rammento che è una classe coi valori static, quindi per richiamarla sarà sufficiente io::nome della proprietà o metodo pubblico static.
Creiamo ora la classe prodotto sul quale andremo a lavoare:
class Prodotto { //stato interno private $nome="Occhiali", $prezzo=12.5, $validoFinoAl="31-12-2016", $prezzoBloccato=true, $iva=22; //metodi public function stampa() { echo date("d-m-Y")." Scheda per il prodotto $this->nome". io::$nl; echo io::linea("-", 70). io::$nl; echo "PREZZO: $this->prezzo" . io::$nl; echo "IVA: $this->iva% ". io::$nl; echo io::linea("-", 70). io::$nl; } }
Questo codice è uguale a quello del precedente articolo, tranne che per il fatto che ho aggiunto delle proprietà ($validoFinoAl=”31-12-2016″, $prezzoBloccato=true) e delle istruzioni nel metodo stampa. Ora all’ interno della classe, aggiungiamo il metodo getter:
//controllo sulla data private function prezzoValido() { if (date("Y-m-d")<=$this->validoFinoAl) return true; else return false; }
Questo metodo restituisce un vero o falso a seconda che la data odierna sia minore o uguale di quella contenuta nella proprietà $validoFinoAl. Da notare la notazione in cui viene ordinata la data per reggere il confronto.
//restituisce -1 se il prezzo non è più valido public function getPrezzo() { if($this->prezzoValido() ) $this->prezzo; else return -1; }
Se il precedente metodo (prezzoValido() ) ha restituito true il metodo assume il valore del prezzo.
//metodo setter public function setPrezzo($nuovoPrezzo, $nuovaDataValidita) { if ( !$this->prezzoBloccato && $nuovaDataValidita>=date("Y-m-d")) $this->prezzo = $nuovoPrezzo; }
Se l’if restituisce true allora settiamo il nuovo prezzo. L’operatore not (!) nega la condizione. Infine i comandi che richiamano le classi ed eseguono le stampe:
$prodotto = new Prodotto(); $prodotto->stampa(); io::linea("-", 70); io::saltaRighe(3); $prezzo = $prodotto->getPrezzo(); if($prezzo> -1) echo "Prezzo: " . $prezzo; else echo "Prezzo non più valido ..."; io::saltaRighe(3); $prodotto->setPrezzo(200,"2016-12-31"); $prodotto->stampa();
Di seguito il codice completo:
<?php $prodotto = new Prodotto(); $prodotto->stampa(); io::linea("-", 70); io::saltaRighe(3); $prezzo = $prodotto->getPrezzo(); if($prezzo> -1) echo "Prezzo: " . $prezzo; else echo "Prezzo non più valido ..."; io::saltaRighe(3); $prodotto->setPrezzo(200,"2016-12-31"); $prodotto->stampa(); class io { static $nl="<br />"; static function linea($carattere, $quanti) { return str_repeat($carattere, $quanti); } static function saltaRighe($quanti) {echo str_repeat(self::$nl, $quanti);} } class Prodotto { //stato interno private $nome="Occhiali", $prezzo=12.5, $validoFinoAl="31-12-2016", $prezzoBloccato=true, $iva=22; //metodi getter //controllo sulla data private function prezzoValido() { if (date("Y-m-d")<=$this->validoFinoAl) return true; else return false; } //restituisce -1 se il prezzo non è più valido public function getPrezzo() { if($this->prezzoValido() ) $this->prezzo; else return -1; } //metodo setter public function setPrezzo($nuovoPrezzo, $nuovaDataValidita) { if ( !$this->prezzoBloccato && $nuovaDataValidita>=date("Y-m-d")) $this->prezzo = $nuovoPrezzo; } //metodi public function stampa() { echo date("d-m-Y")." Scheda per il prodotto $this->nome". io::$nl; echo io::linea("-", 70). io::$nl; echo "PREZZO: $this->prezzo" . io::$nl; echo "IVA: $this->iva% ". io::$nl; echo io::linea("-", 70). io::$nl; } } ?>