Visualizzazione dei risultati da 1 a 5 su 5

Discussione: il metodo eval()

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    1

    il metodo eval()

    Ho un problema con il metodo eval. Avendo questo codice (fatto apposta per semplificare il mio problema)
    Codice PHP:
    <?php
    $uno
    ="ciao";
    $due="ciao";
    $is 'isset($uno) && isset($due)';
    eval(
    '$a = (($is)?1:0);');
    echo 
    $a;
    ?>
    non riesco a ricavare il risultato 0 anche togliendo la variabile $uno o $due.
    Ora il mio obiettivo reale è quello di ricavare il risultato booleano dalla variabile $is, per capirci come se fosse all'interno di un if:
    Codice PHP:
    if(isset($uno) && isset($due)) 
    però ho necessita di averlo dentro una variabile per motivi che non sto a spiegarvi.
    Qualcuno sa spiegarmi cosa sbaglio nell'usare la variabile eval oppure qualche soluzione alternativa?
    Grazie in ainticipo

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Usare eval() è sconsigliato tranne che in casi MOLTO particolari.
    Allora, questo:
    $is = 'isset($uno) && isset($due)';

    se fai
    echo $is;

    avrai
    isset($uno) && isset($due)
    non
    isset(ciao) && isset(ciao)
    le 2 variabili non vengono valutate, quindi $uno e $due sono a tutti gli effetti 2 stringhe e sono sempre definite.

    Per far sì che le due variabili vengano riconosciute come variabili, dovrai usare i doppi apici, quindi così
    $is = "isset($uno) && isset($due)";

    ma in questo caso se una delle due variabili non è definita avrai un errore, per esempio se commenti la riga dove si trova $due ti salterà fuori
    Notice: Undefined variable: due in C:\xampp\htdocs\prova.php on line 4

    come ti muovi ti incarti.

    Se vuoi un'alternativa devi spiegare per bene cosa devi fare.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    1
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Usare eval() è sconsigliato tranne che in casi MOLTO particolari.
    Allora, questo:
    $is = 'isset($uno) && isset($due)';

    se fai
    echo $is;

    avrai
    isset($uno) && isset($due)
    non
    isset(ciao) && isset(ciao)
    le 2 variabili non vengono valutate, quindi $uno e $due sono a tutti gli effetti 2 stringhe e sono sempre definite.

    Per far sì che le due variabili vengano riconosciute come variabili, dovrai usare i doppi apici, quindi così
    $is = "isset($uno) && isset($due)";

    ma in questo caso se una delle due variabili non è definita avrai un errore, per esempio se commenti la riga dove si trova $due ti salterà fuori
    Notice: Undefined variable: due in C:\xampp\htdocs\prova.php on line 4

    come ti muovi ti incarti.

    Se vuoi un'alternativa devi spiegare per bene cosa devi fare.
    Allora in realtà inizialmente avevo fatto con i doppi apici, però per varie prove ho messo gli apici singoli. Comunque non risolve il problema.

    Provo a rispiegare il mio obbiettivo: quando uno scrive la condizione di un if ( ad es if($a == 2)) la condizione restituirà true se è vero e false se è falso ("" e "1" nel caso di php, comunque un valore booleano), giusto? Quello che cerco di fare è ottenere il risultato della condizione che generalmente va dentro l'if (in questo caso $a == 2) e ottenerne il valore booleano risultante dall'operazione logica. Solo che la condizione è all'interno di una variabile sotto forma di stringa (quindi $v = "$a == 2") e quindi non riesco a ricavare ciò che mi serve.

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Cosi funziona.

    Codice PHP:
    <?php
    //$uno="ciao";
    $due="ciao";
    $is 'isset($uno) && isset($due)';
    eval(
    "\$a =(($is)?1:0);");
    echo 
    $a;
    ?>
    Prima non fuzionava perché con gli apici PHP prendeva il nome $is non il suo valore mentre con gli apici doppi è il valore di $is che viene preso in conto ovvero isset($uno) && isset($due)
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    1
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Cosi funziona.

    Codice PHP:
    <?php
    //$uno="ciao";
    $due="ciao";
    $is 'isset($uno) && isset($due)';
    eval(
    "\$a =(($is)?1:0);");
    echo 
    $a;
    ?>
    Prima non fuzionava perché con gli apici PHP prendeva il nome $is non il suo valore mentre con gli apici doppi è il valore di $is che viene preso in conto ovvero isset($uno) && isset($due)
    Ah ok, il fatto è che io non mettevo quello \ prima di $a, per questo mi dava errore. Ma a cosa serve, se posso chiedere?
    Comunque grazie mille

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Allora.

    se hai :

    $pippo = "badaze";

    print "$pippo"; ti stampa badaze

    print "\$pippo"; ti stampa $pippo

    Nel tuo caso, ci volevano 2 cose.
    1 - potere usare il valore di $is cioè isset($uno) && isset($due) da qui l'uso dei doppi apici.
    2 - ricavare il valore del test in $a e non nel valore di $a da qui l'uso di \
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

Tag per questa discussione

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.