Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509

    metodoto __call e numero argomenti

    Ciao ragazzi,
    devo implementare il metodo _call in modo che quando non esiste una funzione me la cerco altrove. il problema riguarda gli argomenti.

    il metodo call accetta come parametri nome del metodo e array degli argomenti


    quando vado a chiamare il metodo quindi mi passa un array di argomenti.


    mio metodo($arg);

    come faccio a passargli gli argomenti e non un array?
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  2. #2
    non puoi,

    in

    Codice PHP:

    function __call($method$args
    $args sarà sempre un array. Quindi se tu chiami

    Codice PHP:

    class Foo{

       function 
    __call($method,$args){  echo "called $method with params".print_r($args,false); }

    }


    $foo = new Foo();
    $foo->bar('hello','world'); 
    nella __call "hello" e "world" saranno due elementi dell'array args


    EDIT: a meno che tu non intenda, dato args, come faccio a passarli ad un'altra funzione presente nella classe che non accetta array come argomenti?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509
    si esatto voglio fare l'ultima cosa che hai detto
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  4. #4
    Originariamente inviato da ciro78
    si esatto voglio fare l'ultima cosa che hai detto
    eh, beh lo puoi fare, solo che devi controllare bene i dati che hai. che so:

    Codice PHP:

    class Foo{

    function 
    __call($method,$args){ return $this->test($args[0],$args[1]); }

    function 
    test($arg1,$arg2){ echo "$arg1 $arg2"; }

    }

    $foo = new Foo();
    $foo->someFunction("hello","World"); //print "hello World"
    $foo->someFunction("hello"); //error in __call, index 1 errato 
    nel senso, dato il nome del metodo e l'array, devi giocarci per "normalizzare" i dati da passare alla funzione di tuo interesse.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509
    capito si tratta quindi di fare un tarocco

    pensavo che php fornisse una magic function che facesse al caso mio

    grazie comunque dello spunto
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  6. #6
    Originariamente inviato da ciro78
    capito si tratta quindi di fare un tarocco

    pensavo che php fornisse una magic function che facesse al caso mio

    grazie comunque dello spunto
    diciamo che in OO __call è utile solo per creare dei proxy, altri utilizzi sono alquanto discutibili dal mio punto di vista. forse call_user_func potrebbe interessarti allo stesso modo
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509
    questa non va bene. in quel caso dovrei stare a riscrivere tutte le funzioni che devo richiamare. invece il metodo call prende automaticamente il nome della function. resta solo il problema degli argomenti
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  8. #8
    Originariamente inviato da ciro78
    questa non va bene. in quel caso dovrei stare a riscrivere tutte le funzioni che devo richiamare. invece il metodo call prende automaticamente il nome della function. resta solo il problema degli argomenti
    la cosa che non capisco è: se la funzione esiste, __call non verrà mai richiamato. Cioè:

    Codice PHP:

    class Foo{

    function 
    __call($method,$args){  echo "chiamato __call"; }

    function 
    test($mioarg){ echo "chiamato test"; }

    }

    $foo = new Foo();
    $foo->test("hello"); //print "chiamato test"; 

    call potrebbe essere utile per fare cose del tipo:

    Codice PHP:

    class Foo{

    function 
    test($arg){ echo "called test $arg"; }

    function 
    __call($method,$args){ 
    $arg array_shift($args);
    $this->test($arg);
    }

    }

    $foo = new Foo();
    $foo->testBar(); 
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509
    la funzione in realtà non esiste.
    il problema si pone perchè php non consdente di estendere una classe da più classi.
    usando call riesco ad ovviare il problema
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  10. #10
    Originariamente inviato da ciro78
    la funzione in realtà non esiste.
    il problema si pone perchè php non consdente di estendere una classe da più classi.
    usando call riesco ad ovviare il problema
    non ricordo un solo linguaggio che lo consenta, sicuro che procedi nella maniera corretta?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.