Visualizzazione dei risultati da 1 a 6 su 6

Discussione: eval e scope locale

  1. #1

    eval e scope locale

    Ciao

    ho una richiesta abbastanza particolare, ho un metodo che esegue un eval, esempio:

    Codice PHP:

    function do_eval(){

    $code '
    /*varie cose...*/

    return "pippo"
    '
    ;

    return eval(
    $code);


    tutto funziona perfettamente.

    Il mio problema è che vorrei passare in qualche modo lo scope attuale alla funzione do_eval(). In pratica, vorrei che dallo script eseguito in do_eval() si possa avere accesso a tutte le variabili a cui accedo dal punto in cui chiamo do_eval().

    Esempio:

    Codice PHP:

    function do_eval(){

    $code '
    return $variabile_esterna." pippo"
    '
    ;

    return eval(
    $code);

    }

    function 
    call_do_eval(){
    $variabile_esterna "assegnazione manuale";

    echo 
    do_eval();


    vorrei che l'output di call_do_eval() fosse

    codice:
    assegnazione manuale pippo
    potrei risolvere il problema passando il parametro $variabile_esterna alla funzione do_eval, ma non è quello che voglio, sempre se possibile, vorrei poter "esportare" lo scope locale della funzione call_do_eval e passarlo alla funzione do_eval.

    E' possibile che voi sappiate?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    Sì, è possibile che noi sappiamo, porongo.

    eval() fa già quello che chiedi, ma se non vedi $variabile_esterna da do_eval() come puoi pretendere che lo veda eval()?

    Codice PHP:
    function do_eval() {
        global 
    $variabile_esterna;
        
    $code 'return $variabile_esterna . " pippo";';
        return eval(
    $code);
    }

    function 
    call_do_eval() {
        global 
    $variabile_esterna;
        
    $variabile_esterna "assegnazione manuale";
        echo 
    do_eval();

    Aggiungici il ; alla fine del return di eval(), altrimenti non funziona.

  3. #3
    non mi hai capito

    la mia domanda è proprio se ho la possibilità con una qualche chiamata di passare tutto lo scope ad una funzione.
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  4. #4
    Codice PHP:
    function do_eval($dv) {
        foreach (
    $dv as $id => $value) {
            $
    $id $value;
        }

        
    $code 'return $variabile_esterna . " pippo";';
        return eval(
    $code);
    }

    function 
    call_do_eval() {
        
    $variabile_esterna "assegnazione manuale";
        echo 
    do_eval(get_defined_vars());

    Se vuoi evitare l'overhead del foreach() devi usare $dv['variabile_esterna'] al posto di $variabile_esterna.

  5. #5
    O meglio:

    Codice PHP:
    function do_eval($dv) {
        
    extract($dv);

        
    $code 'return $variabile_esterna . " pippo";';
        return eval(
    $code);
    }

    function 
    call_do_eval() {
        
    $variabile_esterna "assegnazione manuale";
        echo 
    do_eval(get_defined_vars());


  6. #6
    mooooolto interessante!

    grazie 1000!
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

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.