Programmazione Orientata agli Oggetti in PHP

Concetti di Programmazione Orientata agli Oggetti

La programmazione orientata agli oggetti (OOP) è un paradigma di programmazione che utilizza "oggetti" per progettare applicazioni e software. Questi oggetti sono istanze di classi, che possono contenere dati sotto forma di campi, anche noti come attributi; e codice, sotto forma di procedure, anche noti come metodi. I principali principi dell'OOP sono l'incapsulamento, l'ereditarietà e la polimorfismo.

PHP - Object Oriented Programming

Definire Classi in PHP

In PHP, si definisce una classe utilizzando la parola chiave class. Una classe è un blueprint per la creazione di oggetti. Definisce un set di proprietà e metodi che sono comuni a tutti gli oggetti di un tipo.

class Car {
// Proprietà e metodi della classe vanno qui
}

Creare Oggetti in PHP

Per creare un oggetto da una classe, si utilizza la parola chiave new seguita dal nome della classe.

$myCar = new Car();

Chiamare Funzioni Membro

Le funzioni membro sono definite all'interno di una classe e vengono utilizzate per eseguire operazioni sulle proprietà dell'oggetto. Si chiama una funzione membro su un oggetto utilizzando l'operatore oggetto ->.

$myCar->drive(); // Chiama il metodo drive sull'oggetto $myCar

Funzioni Costruttrici

Un costruttore è un metodo speciale che viene chiamato automaticamente quando viene creato un oggetto da una classe. Viene utilizzato per inizializzare le proprietà dell'oggetto.

class Car {
public function __construct() {
// Inizializzare le proprietà qui
}
}

Distruttore

Un distruttore è un metodo speciale che viene chiamato automaticamente quando un oggetto viene distrutto o esce dallo scope. Viene utilizzato per eseguire compiti di pulizia come chiudere le connessioni al database o liberare la memoria.

class Car {
public function __destruct() {
// Compiti di pulizia vanno qui
}
}

Ereditarietà

L'ereditarietà permette a una classe di ereditare proprietà e metodi da un'altra classe. La classe da cui si eredita è chiamata classe padre, e la classe che eredita è chiamata classe figlia.

class ElectricCar extends Car {
// ElectricCar eredita proprietà e metodi da Car
}

Sovrascrittura di Funzioni

La sovrascrittura di funzioni permette a una classe figlia di fornire una diversa implementazione di un metodo già definito nella sua classe padre.

class ElectricCar extends Car {
public function drive() {
// Diversa implementazione del metodo drive
}
}

Membri Pubblici

I membri pubblici sono accessibili da ovunque, sia all'interno che all'esterno della classe.

class Car {
public $color; // Proprietà pubblica
public function drive() { // Metodo pubblico
// Codice va qui
}
}

Membri Privati

I membri privati sono accessibili solo all'interno della classe in cui sono definiti. Non possono essere accessibili dall'esterno della classe.

class Car {
private $color; // Proprietà privata
private function drive() { // Metodo privato
// Codice va qui
}
}

Membri Protetti

I membri protetti sono accessibili all'interno della classe in cui sono definiti e all'interno di qualsiasi sottoclasse.

class Car {
protected $color; // Proprietà protetta
protected function drive() { // Metodo protetto
// Codice va qui
}
}

Interfacce

Un'interfaccia è un contratto che definisce un set di metodi che una classe deve implementare. Se una classe implements un'interfaccia, promette di fornire un'implementazione per tutti i metodi dichiarati nell'interfaccia.

interface Drivable {
public function drive(); // Dichiarazione del metodo
}

class Car implements Drivable {
public function drive() {
// Implementazione del metodo drive
}
}

Costanti

Le costanti sono valori con nomi che non possono essere modificati una volta definiti. Sono utili per definire valori che non dovrebbero cambiare durante l'esecuzione del programma.

class Car {
const MAX_SPEED = 100; // Valore costante
}

Classi Astratte

Una classe astratta è una classe che non può essere istanziata e serve ad essere estesa da altre classi. Può contenere metodi astratti, che sono metodi senza implementazione, e metodi concreti con un'implementazione.

abstract class Vehicle {
abstract public function move(); // Metodo astratto
public function stop() { // Metodo concreto
// Codice va qui
}
}

Keyword Static

La keyword static viene utilizzata per dichiarare proprietà o metodi come appartenenti alla classe stessa piuttosto che a un'istanza della classe. I membri statici possono essere accessibili senza creare un oggetto della classe.

class Car {
public static $count = 0; // Proprietà statica
public static function getCount() { // Metodo statico
return self::$count;
}
}

Keyword Final

La keyword final viene utilizzata per prevenire che una classe venga estesa, o che un metodo venga sovrascritto.

final class Car {
// Questa classe non può essere estesa
}

Chiamare Costruttori Padre

Quando si crea una classe figlia, si potrebbe voler chiamare il costruttore della classe padre per inizializzare alcune delle sue proprietà. Questo può essere fatto utilizzando la parola chiave parent seguita dall'operatore :: e dal nome del costruttore.


class ElectricCar extends Car {
public function __construct() {
parent::__construct(); // Chiama il costruttore del padre
// Altre inizializzazioni vanno qui
}
}

Credits: Image by storyset