Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114

    $_SESSION = 0 è uguale a tutto!?

    Mi sono imbattuto in una cosa molto strana:

    $_SESSION['ciao'] = 0;
    if ($_SESSION['ciao'] == 'bauh') {
    echo "si";
    }

    è possibile?
    Risolvo mettendo === ma mi sembra davvero strano!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    E' possibile cosa?

  3. #3
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    E' possibile cosa?
    Come è possibile che $_SESSION['ciao'] sia uguale a 'bauh'?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2019
    residenza
    Sicilia
    Messaggi
    86
    È possibile data la natura di PHP, che è un linguaggio a tipizzazione debole.

    Quando deve confrontare due valori di tipo diverso, PHP tenta di fare una conversione (casting) prima di effettuare il confronto.

    Nel tuo caso PHP tenta di convertire la stringa 'bauh' in un intero, assegnandole di fatto il valore 0. Dal confronto si ha 0 == 0, che è perfettamente true. Se provassi a fare un echo di '5' + 4 vedresti che il risultato è uguale a 9, in quanto '5' viene castato a 5.

    Chiaramente utilizzando l'operatore === il confronto fallisce in quanto il tipo intero è diverso dal tipo stringa

    https://www.php.net/manual/en/types.comparisons.php

  5. #5
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    Quote Originariamente inviata da Flaviors200 Visualizza il messaggio
    È possibile data la natura di PHP, che è un linguaggio a tipizzazione debole.

    Quando deve confrontare due valori di tipo diverso, PHP tenta di fare una conversione (casting) prima di effettuare il confronto.

    Nel tuo caso PHP tenta di convertire la stringa 'bauh' in un intero, assegnandole di fatto il valore 0. Dal confronto si ha 0 == 0, che è perfettamente true. Se provassi a fare un echo di '5' + 4 vedresti che il risultato è uguale a 9, in quanto '5' viene castato a 5.

    Chiaramente utilizzando l'operatore === il confronto fallisce in quanto il tipo intero è diverso dal tipo stringa

    https://www.php.net/manual/en/types.comparisons.php

    Grazie, ma scusa se ribatto...
    ci sono altri metodi per far apparire bauh diverso da 0? Mi sembra davvero strano che bauh venga letto 0 e non ci siano altri modi per farlo leggere così com'è!

    Grazie ancora

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    C'è già il metodo === perché te ne serve un altro?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2019
    residenza
    Sicilia
    Messaggi
    86
    Non è che bauh viene letto 0, come ti ho già detto è una questioni di tipi. Se confronti interi con stringhe PHP converte la stringa in intero prima del confronto. Lo fa a runtime quindi non vedi realmente questa conversione.

    Questa brutta caratteristica fa parte di PHP ma non funziona, o non dovrebbe funzionare, così nella programmazione. Con Java ad esempio, che è un linguaggio a tipizzazione forte, questo "strano" comportamento non succede.

    Se vuoi che il confronto 0 == 'bauh' dia false o confronti '0' (stringa) con 'bauh' oppure come suggerito anche da Alhazred utilizzi l'operatore ===

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.