Visualizzazione risultati 1 fino 6 di 6

Discussione: Sospetto [BUG] in PHP4/PHP5

  1. #1
    Guest

    Question Sospetto [BUG] in PHP4/PHP5

    Ciao Altervista,
    lavorando sul mio sito ospitato qui ho riscontrato uno strano comportamento nella selezione multipla del PHP, sia nella versione 4.4.9 che nella versione 5.2.13, entrambe disponibili su Altervista.
    Ecco un esempio del bug:
    Codice PHP:
    $count = 2;
    $stored = 2;

    switch(
    $diff = $count - $stored)
    {
    case (
    $diff < 0):
    echo
    'diff < 0';
    break;
    case (
    $diff == 0):
    echo
    'diff = 0';
    break;
    }
    La selezione multipla è in pratica lo switch: lo strano comportamento consiste nello scegliere il primo caso (case) quando invece va scelto il secondo; infatti provando il codice esso restituisce:
    Codice:
    diff < 0
    Mi confermate che è un BUG oppure sono io che non so usare lo switch?

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Direi la seconda.
    Tu stai usando lo switch per verificare se delle condizioni sono vere, invece serve per verificare che valore ha l'espressione da controllare (in questo caso $diff = $count - $stored).
    Il case verificato è il primo in quanto la variabile $diff è stata impostata a zero nell'espressione dello switch, e l'espressione $diff < 0 viene valutata false, e siccome false è uguale a zero il case viene eseguito.
    Ultima modifica di karl94 : 04-07-2011 alle ore 10.26.58

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Direi la seconda.
    Tu stai usando lo switch per verificare se delle condizioni sono vere, invece serve per verificare che valore ha l'espressione da controllare (in questo caso $diff = $count - $stored).
    Il case verificato è il primo in quanto la variabile $diff è stata impostata a zero nell'espressione dello switch, e l'espressione $diff < 0 viene valutata false, e siccome false è uguale a zero il case viene eseguito.
    Quindi se ho capito bene (così imparo anche io qualcosa) dovrebbe scrivere:

    Codice PHP:
    $count = 2;
    $stored = 2;

    $diff = $count - $stored
    switch($diff)
    {
    case (
    $diff < 0):
    echo
    'diff < 0';
    break;
    case (
    $diff == 0):
    echo
    'diff = 0';
    break;
    }
    giusto?
    ------------------------------------
    EDIT: no, è sbagliato lol
    Ultima modifica di assassinshaunt : 04-07-2011 alle ore 12.35.36

  4. #4
    Guest

    Thumbs up

    Capisco, credo sia colpa della loose comparison operata dall'espressione switch. Pazienza, sostituirò questa selezione multipla con due if. In ogni caso, grazie del chiarimento

    http://www.php.net/manual/en/types.c...arisions-loose
    Ultima modifica di gioman : 04-07-2011 alle ore 11.03.31

  5. #5
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da gioman Visualizza messaggio
    Capisco, credo sia colpa della loose comparison operata dall'espressione switch. Pazienza, sostituirò questa selezione multipla con due if. In ogni caso, grazie del chiarimento

    http://www.php.net/manual/en/types.c...arisions-loose
    No, è diverso: tu hai scritto l'espressione del case pensando che il case si comportasse come un if: se l'espressione è vera viene eseguito il codice altrimenti no.
    Lo switch invece verifica se il valore dell'espressione da verificare è uguale al valore dell'espressione di ogni case.
    Nel case hai scritto una condizione, a questo punto a cosa serviva l'espressione dello switch?

  6. #6
    Guest

    Post

    Io ho semplicemente usato lo switch pensando di poterlo mettere al posto di due if, ma non sempre, come in questo caso, è possibile una sostituzione del genere.

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •