Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Metodi magici...aiuto...temo di non aver capito qualcosa

    Ciao,
    stavo leggendo la guida di HTML.it relativa a PHP OO...e sono arrivato a leggere questo capitolo: http://php.html.it/guide/lezione/424...i-prima-parte/

    Praticamente da quello che ho capito i metodi magici sono dei metodi che vengono invocati automaticamente dal sistema quando accade una particolare situazione nella classe o negli oggetti della classe...ok...fin quì ci stò credo...

    Nell'esempio che mi crea problemi si fà riferimento ai seguneti metodi magici:

    1) __call: viene richiamato automaticamente quando viene richiciamato un metodo inaccessibile nel contesto di un oggetto.

    2) __callStatic: viene richiamato automaticamente quando viene richiciamato un metodo inaccessibile nel contesto della classe (un metodo di classe ad esempio)

    Questo è il codice che mi crea problemi:

    codice:
    <?php
    
    class MyClass{
    
        /* Metodo magico che quando viene invocato un metodo inaccessibile nel
         * contesto dell'oggetto mostra il nome del metodo inaccessibile invocato e
         * la lista dei suoi argomenti */
        public function __call($name, $args){
            echo "È stato richiamato il metodo " . $name . " con i seguenti argomenti: ";
            foreach($args as $arg) echo $arg . " ";
        }
    
        /* Metodo magico che quando viene invocato un metodo inaccessibile nel
         * contesto statico  mostra il nome del metodo inaccessibile invocato e
         * la lista dei suoi argomenti */
        public function __callStatic($name, $args) {
            echo "È stato richiamato il metodo " . $name . " in un contesto statico con i seguenti argomenti: ";
    	foreach($args as $arg) echo $arg . " ";
        }
    
    }
    
    $obj1 = new MyClass();  // Creo un nuovo oggetto istanza di MyClass
    
    // Provo ad invocare su tale oggetto un metodo inaccessibile (non è definito nella classe)
    $obj1-->setName("George");
    
    // Provo ad invocare su tale classe un metodo statico inaccessibile (non è definito nella classe)
    MyClass::setName("Luca");
    
    ?>
    Praticamente quando lo vado ad eseguire mi dà il seguente errore:
    Fatal error: Call to undefined function setName() in /var/www/PHPesempi/metodiMagici1.php on line 26

    Da quello che ho capito usando i metodi magici __call e __callStatic dovrebbe succedere che: tento di accedere a dei metodi inaccessibili (perchè non sono stati dichiarati nella classe) ed invece di darmi quell'errore dovrebbe stamparmi:

    È stato richiamato il metodo setName con i seguenti argomenti: George"
    È stato richiamato il metodo setName in un contesto con i seguenti argomenti: Luca"

    Cos'è che mi sfugge?

    Grazie
    Andrea

  2. #2
    errori di sintassi e non hai messo stati il metodo __callStatic

    Codice PHP:
    <?php

    class MyClass{

        
    /* Metodo magico che quando viene invocato un metodo inaccessibile nel
         * contesto dell'oggetto mostra il nome del metodo inaccessibile invocato e
         * la lista dei suoi argomenti */
        
    public function __call($name$args){
            echo 
    "È stato richiamato il metodo " $name " con i seguenti argomenti: ";
            foreach(
    $args as $arg) echo $arg " ";
        }

        
    /* Metodo magico che quando viene invocato un metodo inaccessibile nel
         * contesto statico  mostra il nome del metodo inaccessibile invocato e
         * la lista dei suoi argomenti */
        
    public static function __callStatic($name$args) {
            echo 
    "È stato richiamato il metodo " $name " in un contesto statico con i seguenti argomenti: ";
        foreach(
    $args as $arg) echo $arg " ";
        }

    }

    $obj1 = new MyClass();  // Creo un nuovo oggetto istanza di MyClass

    // Provo ad invocare su tale oggetto un metodo inaccessibile (non è definito nella classe)
    $obj1->setName("George");

    // Provo ad invocare su tale classe un metodo statico inaccessibile (non è definito nella classe)
    MyClass::setName("Luca");

    ?>
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Originariamente inviato da Santino83_02
    errori di sintassi e non hai messo stati il metodo __callStatic

    Codice PHP:
    <?php

    class MyClass{

        
    /* Metodo magico che quando viene invocato un metodo inaccessibile nel
         * contesto dell'oggetto mostra il nome del metodo inaccessibile invocato e
         * la lista dei suoi argomenti */
        
    public function __call($name$args){
            echo 
    "È stato richiamato il metodo " $name " con i seguenti argomenti: ";
            foreach(
    $args as $arg) echo $arg " ";
        }

        
    /* Metodo magico che quando viene invocato un metodo inaccessibile nel
         * contesto statico  mostra il nome del metodo inaccessibile invocato e
         * la lista dei suoi argomenti */
        
    public static function __callStatic($name$args) {
            echo 
    "È stato richiamato il metodo " $name " in un contesto statico con i seguenti argomenti: ";
        foreach(
    $args as $arg) echo $arg " ";
        }

    }

    $obj1 = new MyClass();  // Creo un nuovo oggetto istanza di MyClass

    // Provo ad invocare su tale oggetto un metodo inaccessibile (non è definito nella classe)
    $obj1->setName("George");

    // Provo ad invocare su tale classe un metodo statico inaccessibile (non è definito nella classe)
    MyClass::setName("Luca");

    ?>
    Ti ringrazio...anche se ho appena scoperto che la mia versione di PHP non supporta __callStatic(), vabbè tanto era solo per fare delle prove...

    Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.