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;
 }
 }
?>