Comportamento anomalo IF

di il
9 risposte

Comportamento anomalo IF

Salve,

sicuramente mi sono perso in un bicchiere d'acqua però non riesco a capire perchè la seguente IF non funziona.

Di seguito riporto il pezzo di codice che ho anche testato su un editor online.

<?php
$t_oper = 'ins';
echo " prima: " . $t_oper;

if (  $t_oper = 'upd' ) {
    echo "dentro: " . $t_oper;
    $id_pag = $_GET['id_pag']; 
}

echo " dopo: " . $t_oper;
?>

il risultato è il seguente:

prima: ins
dentro: upd
Warning: Undefined array key "id_pag" in /home/user/scripts/code.php on line 7
dopo: upd

La domanda è la seguente:

perchè se $t_oper = ‘ins’ il sistema entra nella IF .

In teoria non doveva saltare la IF.

Cosa mi sfugge … direi di così madornale ?

Attendo un vostro gentilissimo aiuto

9 Risposte

  • Re: Comportamento anomalo IF

    <?php
    $t_oper = 'ins';
    echo " prima: " . $t_oper;
    
    if (  $t_oper == 'upd' ) {
        echo "dentro: " . $t_oper;
        $id_pag = $_GET['id_pag']; 
    }
    
    echo " dopo: " . $t_oper;
    ?>
  • Re: Comportamento anomalo IF

    $_GET['id_pag'] significa accodare alla url del browser.. url?id_pag=valore

    Poiché = è l'operatore di assegnazione qualsiasi cosa vera è valutata. Discorso diverso per l'operatore di confronto debole e si scrive con due volte il simbolo uguale ==

    'a' == 'a'; // vero solo in questo caso
  • Re: Comportamento anomalo IF

    Ringrazio per le risposte.

    In effetti PHP mi frega sempre con il “==” nella IF.

    Quello che però non ho capito è come la variabile $t_oper prima delle IF era uguale a “ins” e all'interno della IF si è trasformata in $t_oper uguale a “upd”.

    Se si guardano gli output di Echo che ho riportato si nota questa stranezza.

    Come fa una IF a cambiare il valore di una variabile ?

    Potete aiutarmi a capire ?

    Grazie ancora

  • Re: Comportamento anomalo IF

    Nella If la parte

    $t_oper = 'upd'

    fa esattamente quello che significa ovvero assegna ‘upd’ alla variabile $t_oper

  • Re: Comportamento anomalo IF

    Grazie,

    quindi, se ho capito bene, la presenza di un solo “=” anzichè “==” comporta la trasformazione di una istruzione IF, errata sintatticamente, in istruzione di assegnazione di un valore ad una variabile.

    Direi veramente azzardato per un interprete di linguaggio; nel senso che, se l'istruzione IF è sbagliata, mi sarei aspettato un errore 500, come altri errori di sintassi presenti nel codice, o comunque un qualche errore e non certo la trasformazione di un'istruzione in un'altra.

    Questo è solo una mia opinione, ovviamente.

    Grazie ancora

  • Re: Comportamento anomalo IF

    No, non è così. Non viene ‘trasformato' nulla.

    La If si attende tra parentesi una espressione logica (vero o falso). All'interno c'è ANCHE una istruzione di assegnazione che viene eseguita prima della If cottettamente. Essa rappresenta anche il valore logico (sempre vero in questo caso) che viene usato dalla If

  • Re: Comportamento anomalo IF

    31/08/2023 - Orfeo63 ha scritto:


    Grazie,

    quindi, se ho capito bene, la presenza di un solo “=” anzichè “==” comporta la trasformazione di una istruzione IF, errata sintatticamente, in istruzione di assegnazione di un valore ad una variabile.

    Più che un errore sintattico è un errore logico. Se fosse un errore sintattico verrebbe segnalato dal compilatore.

    Direi veramente azzardato per un interprete di linguaggio; nel senso che, se l'istruzione IF è sbagliata, mi sarei aspettato un errore 500, come altri errori di sintassi presenti nel codice, o comunque un qualche errore e non certo la trasformazione di un'istruzione in un'altra.

    Questo è solo una mia opinione, ovviamente.

    Grazie ancora

    Se ti può consolare scambiare == con = è un errore molto comune tra i principianti che si apprestano ad usare linguaggi simil C (e il PHP è tra questi). Basterebbe comunque un po' di attenzione in più sull'uso degli operatori logici.

    Purtroppo, secondo il mio modesto parere, gli ambienti di sviluppo più evoluti stanno abituando male i nuovi (e a volte anche vecchi) programmatori :)

  • Re: Comportamento anomalo IF

    Puoi rimediare abituandoti a scrivere

     'upd' == $t_oper

  • Re: Comportamento anomalo IF

    31/08/2023 - euscar ha scritto:


    Purtroppo, secondo il mio modesto parere, gli ambienti di sviluppo più evoluti stanno abituando male i nuovi (e a volte anche vecchi) programmatori :)

    Gli ambienti di sviluppo che uso io non so se sono evoluti, ma tutti integrano un “linter” che tipicamente segnala questo genere di possibili fraintendimenti, con un link di approfondimento che spiega anche il perché, ed evita allo sviluppatore di commettere involontariamente un errore.

    Questo per alcuni linguaggi come PHP e JavaScript, mentre per altre finalità generalmente uso linguaggi che nemmeno prevedono questo tipo di utilizzo, per questioni di chiarezza e ambito (es. C#, Delphi, ecc.).

    Il problema semmai è che i “nuovi” sviluppatori tendono al copia/incolla senza approfondire quello che l'ambiente di sviluppo segnala: a meno che non sia un errore di compilazione che impedisce al programma di avviarsi, il resto rientra nel “tutto va bene, Madama la Marchesa”. :)

    Non diamo comunque la colpa delle disattenzioni ai tool che peraltro ci provano a dare una mano, sicuramente più oggi di ieri. :)

Devi accedere o registrarti per scrivere nel forum
9 risposte