Gennaio 13, 2025

get_called_class() in PHP: Cos’è e A Cosa Serve?

Introduzione

La funzione get_called_class() in PHP è uno strumento potente che permette di determinare il nome della classe chiamante nei contesti di ereditarietà. In questo articolo, esploreremo come funziona questa funzione, quando dovresti utilizzarla e vedremo alcuni esempi pratici.

Spiegazione

get_called_class() è una funzione statica che restituisce il nome della classe da cui è stata chiamata. È particolarmente utile nei contesti di ereditarietà, poiché può identificare la classe effettiva che ha invocato il metodo statico, anche se questo è stato definito in una classe genitore.

Funzionamento

Quando un metodo statico utilizza get_called_class(), la funzione restituisce il nome della classe che ha effettivamente chiamato il metodo. Questo è utile per implementare il pattern Singleton o Factory in modo flessibile.

Quando si utilizza

La funzione get_called_class() è utile in vari scenari, specialmente quando si lavora con l’ereditarietà e i metodi statici. Ad esempio, se stai implementando un pattern Singleton o una Factory Method, potrebbe essere necessario sapere quale classe specifica ha invocato un metodo per restituire la stessa istanza o per creare un nuovo oggetto della classe chiamante.

Vantaggi

Utilizzare get_called_class() consente di scrivere codice più generico e riutilizzabile, poiché non è necessario conoscere in anticipo la classe esatta che chiamerà il metodo.

Esempi

Vediamo alcuni esempi pratici dell’uso di get_called_class() in PHP.

Esempio 1: Pattern Singleton

class Singleton {
    private static $instances = [];

    protected function __construct() {}
    protected function __clone() {}

    public static function getInstance() {
        $calledClass = get_called_class();
        if (!isset(self::$instances[$calledClass])) {
            self::$instances[$calledClass] = new static();
        }
        return self::$instances[$calledClass];
    }
}

class MySingleton extends Singleton {}

$instance = MySingleton::getInstance();

In questo esempio, get_called_class() aiuta a garantire che la classe MySingleton ottenga la sua istanza unica separata dalla classe genitore Singleton.

Esempio 2: Factory Method

class ProductFactory {
    public static function create() {
        $class = get_called_class();
        return new $class();
    }
}

class ProductA extends ProductFactory {}
class ProductB extends ProductFactory {}

$productA = ProductA::create();
$productB = ProductB::create();

Qui, get_called_class() permette a ciascuna sottoclasse di creare un’istanza di sé stessa attraverso il metodo statico create() definito nella classe genitore ProductFactory.

In conclusione, get_called_class() è una funzione utile quando si lavora con l’ereditarietà in PHP. Consente di scrivere codice più flessibile e riutilizzabile, riducendo la necessità di specificare esplicitamente il nome della classe chiamante.

Giorgio

Sono un Web Developer con oltre 20 anni di esperienza nello sviluppo di applicazioni web complesse. Specializzato in PHP, gestione di database relazionali e non relazionali, e integrazione di API, realizzo soluzioni robuste e scalabili per soddisfare esigenze aziendali e tecniche. Mi occupo di architetture server-side, ottimizzazione delle performance e automazione dei processi.