Visualizzazione risultati 1 fino 8 di 8

Discussione: Bug del PHP?

  1. #1
    Guest

    Predefinito Bug del PHP?

    Codice PHP:
    if("STRINGA CHE VUOI TU"==0) echo "OK";
    Dà la condizione per vera (ho provato sia in locale che su AV) ._.
    qualcuno ha una spiegazione o è un bug del PHP?

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Così ha lo stesso risultato?
    Codice PHP:
    if("STRINGA CHE VUOI TU"=="0") echo "OK";
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    Guest

    Predefinito

    No, solo confrontando una stringa con lo zero numerico.

    EDIT:

    Ok ho trovato la spiegazione nel sistema di bug reports di PHP.net.... praticamente le stringhe vengono convertite in numeri automaticamente, e una stringa letterale varrà sempre 0. Quindi non è un bug (ma è lo stesso alquanto strano, penso sarebbe dovuto essere il numero a essere convertito in stringa in questo caso).
    Ultima modifica di Zorinik : 19-10-2008 alle ore 16.12.07

  4. #4
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Più di un bug penso che sia una buona variante semantica per evitare la comparsa di un errore, no?
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  5. #5
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Sì, io me ne sono accorto da un'altra cosa, mysql, ho provato a inserire in un campo int una stringa e mi inseriva zero.

    Dato che non è bug php, non è neanche bug mysql, no?




    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da Xsescott Visualizza messaggio
    Più di un bug penso che sia una buona variante semantica per evitare la comparsa di un errore, no?
    Ma... perché? Non basterebbe restituire semplicemente false essendo le due cose prima e dopo l'operatore di confronto (la stringa e lo 0) completamente diverse?
    Bah... cmq ho risolto con strval($var) (dove $var potrebbe contenere lo 0)

  7. #7
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da foreach Visualizza messaggio
    Sì, io me ne sono accorto da un'altra cosa, mysql, ho provato a inserire in un campo int una stringa e mi inseriva zero.

    Dato che non è bug php, non è neanche bug mysql, no?




    foreach
    la semantica vuole che se tu provi a sommare un intero con una stringa di caratteri, invece di restituirti un errore ti dice: "senti tu mi hai passato un numero e una stringa di caratteri, io non ti restituisco errore ma per far questo devo convertirla (con un cast implicito) in un intero che non abbia valore (quindi uno zero)"; quindi ti restituisce lo stesso numero,visto che semanticamente non ha senso assegnare un valore ad una stringa di caratteri, quindi è sensato che il controllore di semantica dinamica faccia questo lavoro.
    La cosa è assai diversa e sensata nel caso in cui invece di passargli un intero e una stringa di caratteri, gli passassi un intero e una stringa di interi, allora li vi sarebbe un cast "sensato" perchè lui dice: "tu mi hai passato un numero intero e lo vuoi sommare con un numero di tipo stringa, sono formalmente due numeri se ben di tipo diverso, che faccio? bhe li sommo allora!

    Questo ovviamente è definito nella grammatica del lingauggio, ogni linguaggio ha la sua grammatica, simile ma non uguale.


    Saluti.
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    simili cose accadono perché si usa l'operatore == che rappresenta l'uguaglianza "gentile", ovvero mediata da conversioni automatiche. Esiste anche ===, che è indica l'uguaglianza esatta, per cui due valori sono identici se hanno lo stesso tipo e lo stesso contenuto.

Regole di scrittura

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