JavascriptProva

martedì 1 maggio 2018

Overriding di un metodo e uso dell'operatore di scope per eseguire il metodo della classe base in php

Vediamo di fare un overriding di un metodo di una classe, e quindi di accedere al metodo della classe genitrice.

Inventiamo una classe...

Non ho ancora indagato se esistano in php le classi astratte.
Comunque, facciamo che la classe triangolo sia derivata della classe rettangolo, anche se ci starebbe meglio una classe astratta...

<?php

class rettangolo{
    private $area;
    private $base;
    private $altezza;
    
    function __construct($b, $a){
        $this->base=$b;
        $this->altezza=$a;
    }
    
    public function get_area(){
        return $this->base * $this->altezza;
    }
}

class triangolo extends rettangolo{
    function __construct($b,$a){
        $this->base=$b;
        $this->altezza=$a;
    }

    public function get_area(){
        return ($this->base * $this->altezza)/2;
    }
}

$myrect=new rettangolo(4,5);
echo "Area del rettangolo ".$myrect->get_area();
echo "<br>";
$mytrg=new triangolo(4,5);
echo "Area del triangolo ".$mytrg->get_area();
?> 
I risultati sono come mi attendo:
Area del rettangolo 20
Area del triangolo 10

Dunque ho overridato il metodo get_area().
Ora voglio usare l'operatore di scope (non so se anche in php si chiama così) per accedere al metodo della classe base.
<?php

class rettangolo{
    protected $base;
    protected $altezza;
    function __construct($b,$a){
        $this->base=$b;
        $this->altezza=$a;
    }
    
    public function get_area(){
        return $this->base * $this->altezza;;
    }
}

class triangolo extends rettangolo{

    function __construct($b, $a){
        $this->base=$b;
        $this->altezza=$a;
    }

    public function get_area(){
        return rettangolo::get_area();
    }
}

$myrect=new rettangolo(4,5);
echo "Area del rettangolo ".$myrect->get_area();
echo "<br>";
$mytrg=new triangolo(4,5);
echo "Area del triangolo ".$mytrg->get_area()
?> 
Area del rettangolo 20
Area del triangolo 20

Perfetto!

Nessun commento:

Posta un commento