Concetto di programmazione orientata agli oggetti (OOP) in PHP con esempio
โก Riepilogo intelligente
La programmazione orientata agli oggetti in PHP modella un'applicazione attorno a oggetti del mondo reale utilizzando classi e oggetti. Questa guida illustra i principi OOP di incapsulamento, ereditarietร e polimorfismo, come PHP li supporta e crea, passo dopo passo, esempi funzionanti di classi, ereditarietร e interfacce.

Cos'รจ l'OOP?
La programmazione orientata agli oggetti รจ un approccio allo sviluppo software che modella un'applicazione attorno a oggetti del mondo reale, come dipendenti, automobili e conti bancari. Una classe definisce le proprietร e i metodi di un oggetto del mondo reale. Un oggetto รจ un'istanza di una classe.
Le tre componenti fondamentali della programmazione orientata agli oggetti sono:
- Analisi orientata agli oggetti โ funzionalitร del sistema
- Progettazione orientata agli oggetti โ architettura del sistema
- Programmazione orientata agli oggetti โ implementazione dell'applicazione
Principi di programmazione orientata agli oggetti
I tre principi fondamentali della programmazione orientata agli oggetti sono:
- incapsulamento โ questo riguarda il nascondere i dettagli di implementazione ed esporre solo i metodi. Gli scopi principali dell'incapsulamento sono:
- Ridurre la complessitร dello sviluppo del software: nascondendo i dettagli di implementazione ed esponendo solo le operazioni, l'utilizzo di una classe diventa semplice.
- Proteggere lo stato interno di un oggetto: l'accesso alle variabili di classe avviene tramite metodi come get e set. Questo rende la classe flessibile e di facile manutenzione.
- Consente di modificare l'implementazione interna della classe senza preoccuparsi di compromettere il codice che la utilizza.
- Ereditร โ questo riguarda la relazione tra classi. La relazione assume la forma di un genitore e un figlio. Il figlio utilizza i metodi definiti nella classe genitore. Lo scopo principale dell'ereditarietร รจ:
- Riutilizzabilitร : piรน elementi figli possono ereditare dallo stesso elemento padre. Questo รจ molto utile quando dobbiamo fornire funzionalitร comuni come l'aggiunta, l'aggiornamento e l'eliminazione di dati dal database.
- Polimorfismo โ questo riguarda l'avere un'unica interfaccia con molte implementazioni diverse. Lo scopo principale del polimorfismo รจ:
- Per semplificare la manutenzione delle applicazioni e renderle piรน estendibili.
OOP Concepts nel PHP
PHP รจ un linguaggio di scripting orientato agli oggetti; supporta tutti i principi sopra menzionati. I principi sopra menzionati vengono realizzati tramite:
- incapsulamento โ tramite l'uso dei metodi โgetโ e โsetโ e dei modificatori di accesso.
- Ereditร โ tramite l'uso della parola chiave extends
- Polimorfismo โ tramite l'utilizzo della parola chiave implements
Ora che abbiamo le conoscenze di base dell'OOP e di come รจ supportato PHPVediamo ora alcuni esempi che mettono in pratica i principi sopra esposti.
Cos'รจ UML?
Il linguaggio di modellazione unificato (UML) รจ una tecnica utilizzata per progettare e documentare sistemi orientati agli oggetti.
UML produce diversi documenti, ma in questo articolo analizzeremo il diagramma delle classi, che รจ molto importante per la programmazione PHP orientata agli oggetti.
Esempio di diagramma di classi
Chiave del diagramma di classi
- Migliori scatola superiore contiene il nome della classe
- Migliori casella centrale contiene le variabili di classe
- Migliori scatola inferiore contiene i metodi della classe
- Migliori meno (-) il segno indica ambito privato
- Migliori piรน (+) il segno significa ambito pubblico
- Migliori cancelletto (#) il segno significa ambito protetto
Come creare una classe in PHP
La parola chiave class viene utilizzata per definire una classe in PHP. Di seguito sono riportate le regole per creare una classe in PHP.
- Il nome della classe dovrebbe iniziare con una lettera
- Il nome della classe non puรฒ essere una parola riservata PHP
- Il nome della classe non puรฒ contenere spazi
Supponiamo di voler creare una classe per rappresentare gli animali. Inizieremo identificando le caratteristiche comuni a tutti gli animali.
- Tutti gli animali appartengono a una famiglia, come ad esempio gli erbivori, i carnivori, ecc.
- Tutti gli animali mangiano cibo
Il diagramma sottostante mostra il diagramma delle classi per l'animale.
Ora procediamo con la codifica della nostra classe Animal.
<?php class Animal { private $family; private $food; public function __construct($family, $food) { $this->family = $family; $this->food = $food; } public function get_family() { return $this->family; } public function set_family($family) { $this->family = $family; } public function get_food() { return $this->food; } public function set_food($food) { $this->food = $food; } } ?>
QUI,
- โprivate $family, $foodโ significa che le variabili non possono essere accedute direttamente dallโesterno della classe (incapsulamento).
- โpublic function __construct($familyโฆ)โ รจ il metodo costruttore di PHP. Questa funzione viene chiamata ogni volta che viene creata un'istanza della classe. In questo caso, stiamo impostando la famiglia e il cibo.
- โpublic function getโฆ()โ รจ il metodo utilizzato per accedere al valore della famiglia o del cibo (incapsulamento)
- โpublic function setโฆ()โ รจ il metodo utilizzato per impostare il valore della famiglia o del cibo (incapsulamento)
Come implementare l'ereditarietร in PHP
Lavoreremo con una mucca e un leone. Sia la mucca che il leone ereditano dalla classe Animale.
Il diagramma delle classi riportato di seguito mostra le relazioni.
Si noti che la mucca eredita dalla classe Animal e definisce anche le proprie variabili e i propri metodi.
Ora procediamo con la codifica della classe Cow.
<?php class Cow extends Animal { private $owner; public function __construct($family, $food) { parent::__construct($family, $food); } public function set_owner($owner) { $this->owner = $owner; } public function get_owner() { return $this->owner; } } ?>
Ora procediamo con la codifica della classe Lion.
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
QUI,
- โclass โฆ extends Animalโ fa sรฌ che le classi Cow e Lion utilizzino i metodi della classe Animal (ereditarietร ).
Come creare un oggetto della classe
Le classi Animale, Mucca e Leone dovrebbero essere tutte nella stessa directory per semplicitร .
Creiamo ora l'applicazione che utilizza le nostre classi.
Esempio di classe PHP
<?php require 'Animal.php'; require 'Cow.php'; require 'Lion.php'; $cow = new Cow('Herbivore', 'Grass'); $lion = new Lion('Carnivore', 'Meat'); echo '<b>Cow Object</b> <br>'; echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>'; echo '<b>Lion Object</b> <br>'; echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food(); ?>
Testare la nostra applicazione
Ora visualizziamo la nostra applicazione in un browser web.
Entrambi gli oggetti riutilizzano i metodi get_family e get_food ereditati dalla classe Animal, il che dimostra l'ereditarietร in azione.
Come implementare il polimorfismo in PHP
Supponiamo di voler sviluppare un'applicazione che si connetta a diversi motori di database come MySQL and SQL Server ma utilizza la stessa interfaccia uniforme. Possiamo creare un'interfaccia che definisce i metodi standard e un assolutotracclasse t che implementa i metodi comuni.
- Interfaccia โ รจ simile a una classe. Definisce solo i metodi e i parametri.
- Abstracclasse t โ รจ una classe che non puรฒ essere utilizzata per creare direttamente un oggetto. Il suo scopo รจ fornire implementazioni parziali o totali di metodi comuni.
Il diagramma delle classi qui sotto illustra la relazione tra i nostri assolutitracClasse t, interfaccia e classi di implementazione.
Creiamo ora i nostri addominalitracclasse t.
<?php abstract class DBCommonMethods { private $host; private $db; private $uid; private $password; public function __construct($host, $db, $uid, $password) { $this->host = $host; $this->db = $db; $this->uid = $uid; $this->password = $password; } } ?>
QUI,
- โasstrac"Classe t" significa che la classe non puรฒ essere utilizzata direttamente per creare un oggetto
- โ$host, $dbโฆโ sono variabili di classe comuni a tutte le implementazioni
- โfunction __construct(โฆ)โ รจ il metodo costruttore della classe che imposta i valori delle variabili comuni allโinizializzazione
Creiamo ora l'interfaccia che contiene i metodi standard, che verranno implementati in modo diverso a seconda del motore del database.
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
QUI,
- โinterfacciaโ รจ la parola chiave per creare interfacce
- โfunzione pubblicaโฆ(โฆ)โ sono i metodi standard che dovrebbero essere implementati
Creiamo ora le classi concrete che estenderanno la classe DBCommonMethods e implementeranno l'interfaccia DBInterface. Innanzitutto, MySQLDriver.php:
<?php class MySQLDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { /* connect code goes here */ } public function delete($where) { /* delete code goes here */ } public function insert($data) { /* insert code goes here */ } public function read($where) { /* read code goes here */ } public function update($where) { /* update code goes here */ } } ?>
Quindi, MSSQLServerDriver.php:
<?php class MSSQLServerDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { /* connect code goes here */ } public function delete($where) { /* delete code goes here */ } public function insert($data) { /* insert code goes here */ } public function read($where) { /* read code goes here */ } public function update($where) { /* update code goes here */ } } ?>
QUI,
- โclass โฆ extends DBCommonMethodsโ utilizza i metodi in DBCommonMethods
- โโฆ implements DBInterfaceโ garantisce che la classe fornisca i metodi standard indipendentemente dal driver del database utilizzato.
Il codice che utilizza le classi sopra descritte avrebbe questo aspetto:
<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>
Oppure:
<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>
Il resto del codice sarebbe identico per entrambi i driver, ad esempio:
<?php $db->db_connect(); $db->insert($data); ?>
Questo รจ il polimorfismo in azione: le stesse chiamate di metodo funzionano su qualsiasi driver che implementi l'interfaccia, quindi il codice circostante non cambia mai quando si cambia motore di database.





