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