Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460

    PHP OO: chiamare un metodo di nome non noto a priori

    Ciao a tutti,

    ho una classe e avrei bisogno di chiamare un metodo di cui non so il nome a priori. Io avrei fatto cosi:

    codice:
    Class pippo {
    
        private $title;
    
        function pippo($azione = null) {
            $title = "prova titolo";
            if ($azione != null)
                eseguiAzione($azione);
        }
    
        public function eseguiAzione($azione) {
            /* Questa e' la fonte del problema: */
            $this->{$azione};
        }
    
        public function printTitle() {
          print($this->title);
        }
    
    }
    Cosi' non funziona. Ho provato a utilizzare call_user_func(), ma chiama solo metodi statici e dunque, se $azione vale "printTitle", quando arriva a $this mi si blocca e dice che non posso usare $this in un contesto non statico.

    E' l'ennesima merdata di PHP o posso sperare di fare qualcosa del genere? Se non posso fare questa cosa stupidissima, ho appena buttato via 2 settimane di lavoro, quindi vi prego di aiutarmi a trovare una soluzione.

    Per inciso, il codice sopra e' solo esemplificativo, non ha alcun utilizzo pratico se non quello di spiegare il problema.
    There are 10 types of people in the world - those who understand binary and those who don't.

  2. #2
    ...
    public function eseguiAzione($azione) {
    eval('$this->'.$azione.';');
    }
    ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Non funziona.

    Peccato, anche se era un orrore di sintassi non era un cattivo tentativo.
    There are 10 types of people in the world - those who understand binary and those who don't.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Ho trovato un modo analogo per farlo andare.

    Ho dovuto aggiungere una proprieta' all'oggetto chiamata action e poi:

    eval('$this->action;');

    Allucinante, ma funziona.

    Super grazie per la dritta.
    There are 10 types of people in the world - those who understand binary and those who don't.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Correggo la cavolata che ho scritto sopra:

    Basta fare:

    codice:
        $methodToCall = "myMethod";
        eval ('$this->' . $methodToCall . '();');
    There are 10 types of people in the world - those who understand binary and those who don't.

  6. #6
    oppure:

    call_user_func_array( array($this, $metodo), $argomenti);


  7. #7
    Originariamente inviato da frinkia
    Non funziona.

    Peccato
    alle 6 e mezzo di mattina puo' capitare di dimenticarsi 2 parentesi ...




    Originariamente inviato da frinkia
    , anche se era un orrore di sintassi non era un cattivo tentativo.
    dov'e' l'orrore di sintassi ??? ... hai risolto aggiungendo 2 parentesi e lasciando l'orrore inesistente ... spiegami cosa intendi per orrore perche' concatenare stringhe credevo fosse una cosa normale :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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 © 2025 vBulletin Solutions, Inc. All rights reserved.