Nelle ultime lezioni proposte da questa trattazione abbiamo analizzato i concetti basilari dell’ereditarietà in PHP. In questo capitolo tratteremo invece delle classi astratte, le quali ricoprono un ruolo fondamentale nella programmazione orientata agli oggetti (OOP).
Cosa sono le classi astratte (abstract class
Una classe astratta è definibile come un particolare tipo di classe la quale non può essere istanziata
Possiamo considerare una classe astratta come una superclasse, in cui è possibile aggiungere uno o più metodi astratti
Per questo motivo possiamo considerare questa tipologia di classe come una "base di partenza" o "modello" per la creazione di classi.
abstract
<?php
// definizione della classe astratta Person
// una classe astratta può contenere metodi normali e metodi astratti.
abstract class Person {
private $name = "";
private $lastname = "";
public function setName($name, $lastname) {
$this->name = $name;
$this->lastname = $lastname;
}
public function getName() {
return "$this->name $this->lastname";
}
abstract public function viewHello();
}
?>
Nell'esempio, abbiamo dichiarato la classe astratta Person
abstract
$name
$lastname
setName
getName
La classe Person
viewHello
Come detto in precedenza, una classe astratta non può essere istanziata. In altre parole, non è consentito creare una nuova istanza di una classe astratta. Infatti, provando ad istanziare la classe Person
<?php
...
$p = new Person('Giuseppe','Rossi');
...
?>
dove viene generato un errore di runtime interrompendo l'esecuzione dello script:
Fatal error: Cannot instantiate abstract class Person in [...]
Ora potremo creare la nostra classe Employees
Person
<?php
// definizione della sottoclasse Employees
class Employees extends Person {
public function viewHello() {
echo "Hello " . $this->getName()."<br>";;
}
function setId($id_rif) {
$this->id_rif = $id_rif;
}
}
// oltre a chiamare setId() è possibile richiamare getName() e setName(),
// dal momento che questi metodi sono ereditati dalla classe astratta Person
$employee = new Employees();
$employee->setName( "Giuseppe", "Rossi" );
$employee->viewHello();
$employee->setId(7);
?>
Come possiamo vedere, la nostra classe, implementa il metodo astratto viewHello
Person
setId()
Hello Giuseppe Rossi
Dichiarando Employee
viewHello()
Fatal error: Class Employees contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Person::viewHello) in [...]
Conclusioni
Con questa lezione abbiamo descritto le modalità con cui utilizzare le classi astratte per capirne l'importanza. Nella prossima lezione verranno descritte delle ulteriori astrazioni delle classi astratte: le interfacce.