Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 9 di 50
  • livello avanzato
Indice lezioni

Ereditarietà: estendere le classi in PHP

Scopriamo il funzionamento del meccanismo di ereditarietà in PHP nella programmazione orientata agli oggetti. Come una sottoclasse può ereditare o ridefinire metodi e proprietà da una classe padre e come generare gerarchie di classi o ampliare le funzionalità di ogni classe.
Scopriamo il funzionamento del meccanismo di ereditarietà in PHP nella programmazione orientata agli oggetti. Come una sottoclasse può ereditare o ridefinire metodi e proprietà da una classe padre e come generare gerarchie di classi o ampliare le funzionalità di ogni classe.
Link copiato negli appunti

Come osservato nei precedenti capitoli, uno dei vantaggi del paradigma object orientied, è il riutilizzo del codice. In questo capitolo parleremo dell'ereditarietà che ha un ruolo fondamentale nella programmazione OOP.

Tramite l'ereditarietà (inheritance), una classe (sottoclasse o classe figlia), può ereditare sia i metodi che le proprietà da un'altra classe (superclasse o classe padre). Inoltre, la nuova sottoclasse, può definire nuove proprietà e metodi, oppure, ridefinire metodi della classe padre (tecnica dell'overriding della quale parleremo in dettaglio nei prossimi capitoli).

A differenza di altri linguaggi di programmazione, come ad esempio nel C++, in PHP, non è prevista l'ereditarietà multipla. Cioè, non è possibile che una classe estenda contemporaneamente più di una classe. In alternativa all'utilizzo dell'ereditarietà multipla, in PHP, si utilizzano le Interfacce di cui parleremo successivamente.

Estendere una classe

Anche in PHP, come nel linguaggio Java, si utilizza la parola chiave extends per creare la relazione di ereditarietà tra due classi.

<?php
	class classefliglia extends classepadre{
	...
	}
?>

L'esempio riportato successivamente, mostra come la classe Person viene ereditata dalla nuova classe Employees:

<?php
	// dichiarazione della classe Person
	class Person {
			public $name; // visibile ovunque nello script
			protected $id_rif; // visibile nella superclasse e nella sottoclasse
			private $password; // Visibile solo nella classe Person
			// costruttore
			public function __construct()
			{
				echo "Chiamata costruttore della Superclasse"."<br>";
				// inizializzazione della proprietà $name
				$this->name = "Giuseppe Rossi";
			}	
			// metodi
			public function getName() {
				// restituisce il nome
				return $this->name;
			}				
			public function setPassword($password) {
				// imposta la password
				 $this->password = $password;
			}
	}
	// definizione della sottoclasse Employees
	class Employees extends Person {
		public $profile;
		public function __construct($profile, $password) // costruttore della sottoclasse
		{
			$this->setPassword($password);
			$this->profile=$profile; // inizializzazione della nuova proprietà della sottoclasse
		}	
		function setId($id_rif) {
			$this->id_rif = $id_rif;
		}
	}	
	// istanzia un nuovo oggetto della classe Person
	$customer = new Person();
	echo "Customer: ".$customer->getName()."<br />";
	$employee = new Employees("Amministratore","XUHjLoo");
	$employee->name = "Mario Rossi";
	$employee->setId(7);
	// restituisce un array associativo dell'oggetto
	print_r(get_object_vars($customer));
	print_r(get_object_vars($employee));
?>

Nell'esempio abbiamo utilizzato una classe Person e una sottoclasse Employees, la quale eredita tutti i metodi e gli attributi della classe genitore.

In Employees abbiamo aggiunto un'ulteriore funzionalità, inserendo la proprietà $profile utile, ad esempio, per definire il ruolo del nostro "Employee" all'interno di un'azienda.

<?php
	...
		public $profile;
	...
?>

All'interno di una sottoclasse, possiamo utilizzare tutti i metodi e le proprietà dichiarate public e private nella classe genitore. Notiamo che la sottoclasse accede a tutti i membri della superclasse attraverso la parola chiave $this.

<?php
	...
	$this->setPassword($password);
	$this->profile = $profile;
	...
?>

Nella superclasse abbiamo utilizzato il modificatore di accesso protected per la proprietà $id_rif, tutti i membri protetti di una classe sono visibili nella superclasse e nella sottoclasse. In questo caso possiamo utilizzare:

<?php
	...
	$this->id_rif = $id_rif;
	...
?>

Il membro $password, dichiarato privato, non è visibile nella sottoclasse: quindi nel costruttore della sottoclasse Employee è necessario usare setPassword() per impostare la password. La sottoclasse accede alle proprietà private soltanto tramite i metodi pubblici della superclasse.

<?php
	...
	$this->setPassword($password);
	...
?>

Conclusioni

In questa lezione abbiamo visto i concetti fondamentali dell'ereditarietà in PHP e nella programmazione orientata agli oggetti. Nel prossimo capitolo vedremo come ereditare il costruttore/distruttore e la tecnica dell'overriding.

Ti consigliamo anche