Overload

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Salve ragazzi, in Java l'overload era spiegato più o meno così: "scrittura di più metodi identificati dallo stesso nome che però hanno, in ingresso, parametri di tipo e numero diverso." Con Php non riesco a capire come viene applicato l'overload. Ad esempio nei metodi _set e _get

Codice:
class MyClass {
 
        public function __get($name) {
                echo "Si è tentato di accedere alla proprietà "" . $name . "" ma non è disponibile";
        }
         
        public function __set($name, $value) {
                echo "Si è tentato di impostare la proprietà "" . $name . "" al valore " . $value;
        }
 
}
 
$obj1 = new MyClass();
 
// stampa "Si è tentato di accedere alla proprietà "a" ma non è disponibile"
echo $obj1->a;
 
// stampa "Si è tentato di impostare la proprietà "a" al valore 10"
$obj1->a = 10;

Il codice è più o meno chiaro. Però poi dice che in questo esempio si applica il principio di overloadind. Ma non riesco a capire come lo applica!!!
 
Prendi questo esempio:

PHP:
class Pippo
{
    public function __call($metodo, $args)
    {
        echo "Chiamata al metodo $metodo";
    }
}

$pippo = new Pippo;

$pippo->qui(); 
$pippo->qua();

Il significato di overloading in PHP è diverso da quello di Java, in PHP esso vuol dire poter aggiungere proprietà e metodi a runtime (cioè in fase di esecuzione dell'applicazione) con i metodi "magici" __get, __set, __call etc.
 
Grazie Eliox. Il metodo __call viene eseguito quando viene richiamato un metodo inaccessibile.

Codice:
class Pippo
{
    public function __call($metodo, $args)
    {
        echo "Chiamata al metodo $metodo";
    }
}

$pippo = new Pippo;

$pippo->qui(); 
$pippo->qua();

Quindi quando vai a richiamare i metodi qui e qua dato che non esistono "entra in funzione" il metodo __call. Al posto di $metodo ci mette il nome del metodo non trovato e al posto di args ci mette gli eventuali parametri passati. Quindi questa "riscrittura di $metodo con qui() o qua() è l'overloading giusto?
 
Detto in parole povere, l'overloading server appunto per operare con attributi non accessibili o non dichiarati.