php

php

Il metodo magico call – OOP in PHP

Non ci sono commenti

Foto dell'autore

By Donato Pirolo

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.

Lascia un commento