Il metodo magico call - OOP in PHP

Il metodo magico call - OOP in PHP

Cos'è il metodo magico __call?

In PHP, il metodo magico __call() è un metodo che viene invocato automaticamente quando si cerca di chiamare un metodo non definito in una classe. Questo metodo accetta due parametri: il nome del metodo che si sta cercando di chiamare e un array contenente gli argomenti passati al metodo.

Il metodo magico __call() viene utilizzato principalmente quando si desidera creare una classe che gestisce dinamicamente i metodi chiamati su di essa. Ad esempio, potrebbe essere utilizzato per creare un sistema di gestione degli eventi, in cui il nome del metodo rappresenta l'evento che si vuole gestire e gli argomenti passati rappresentano i dati associati all'evento.

Un altro caso d'uso comune per il metodo magico __call() è quando si desidera creare una classe che si comporta come un proxy per un'altra classe. In questo caso, __call() potrebbe essere utilizzato per instradare le chiamate di metodo alla classe sottostante.

Qual'é la sintassi del metodo magico __call?

public function __call($name, $arguments) {
    // corpo del metodo
}

Un esempio con il metodo magico __call.

class Matematica {
    public function somma($a, $b) {
        return $a + $b;
    }
}

class Calcolatore {
    protected $matematica;

    public function __construct(Matematica $matematica) {
        $this->matematica = $matematica;
    }

    public function __call($nomeMetodo, $args) {
        if(method_exists($this->matematica, $nomeMetodo)) {
            return call_user_func_array(array($this->matematica, $nomeMetodo), $args);
        } else {
            throw new Exception("Metodo $nomeMetodo non trovato");
        }
    }
}

$calcolatore = new Calcolatore(new Matematica());
echo $calcolatore->somma(2, 3); // output: 5

In questo esempio, abbiamo due classi: Matematica e Calcolatore. La classe Matematica ha un metodo somma() che prende due argomenti e restituisce la somma.

La classe Calcolatore ha una proprietà $matematica che contiene un'istanza della classe Matematica e un metodo magico __call(). Quando viene chiamato un metodo sulla classe Calcolatore, il metodo magico __call() controlla se il metodo chiamato esiste nella classe Matematica. Se il metodo esiste, viene chiamato il metodo corrispondente sulla classe Matematica. In caso contrario, viene generata un'eccezione.

Infine, viene creata un'istanza della classe Calcolatore e viene chiamato il metodo somma(). Poiché il metodo somma() non è stato definito esplicitamente nella classe Calcolatore, viene invocato il metodo magico __call() che a sua volta richiama il metodo somma() sulla classe Matematica. Il risultato della somma (5) viene quindi stampato a schermo.

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2023
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram