Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Dubbio sugli operatori di confronto

    Salve, sto seguendo una delle guide di html.it per il PHP, e ho incontrato un'affermazione che non mi convince.
    In PHP ogni lettera è considerata maggiore di qualunque cifra, tanto che, se ho
    Codice PHP:
    $c 'Giovanni'$e '4 gatti'
    in confronto booleano
    Codice PHP:
    $c $e
    è vero.

    Però viene detto anche che, in un confronto fra stringhe, PHP controlla se all'inizio della stringa ci sono dei numeri: se ne trova, considererà tutti i numeri che trova inizialmente come il valore numerico di quella stringa. Se non ne trova, il valore della stringa sarà 0.
    Fa poi questo esempio:
    Codice PHP:
    $c 'molte persone'$e '5'
    Affermando che è falso quanto segue.
    Codice PHP:
    $e $c
    Ora, scusate l'ignoranza, ma in questo confronto ho che:
    1) ogni lettera è maggiore di qualunque cifra, quindi $e > $c è di conseguenza falso, però $c dovrebbe essere una stringa che vale zero, mentre $e dovrebbe valere 5, perciò $e > $c dovrebbe essere vero (come dire 5 > 0).
    Cosa non quadra nel mio ragionamento?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Per verificare basta che esegui uno script con i confronti.

    Per la questione "il valore numerico di una stringa" è vera la questione del controllo dei primi caratteri, ma quello che "sbagli" è che solo in certi casi la stringa viene convertita nel suo valore numerico, in altri casi è trattata come stringa e basta. Per questo la stringa '5 ciao' in alcuni casi può essere computata come il numero "5", in altri no. Questo fa la differenza. Per vedere "al volo" i casi basta che esegui lo script:

    Codice PHP:
    $c 'molte persone'$e '5';
    var_export($e>$c); 
    e osservi il risultato

  3. #3

    Re: Dubbio sugli operatori di confronto

    Originariamente inviato da Gas75
    Però viene detto anche che, in un confronto fra stringhe, PHP controlla se all'inizio della stringa ci sono dei numeri: se ne trova, considererà tutti i numeri che trova inizialmente come il valore numerico di quella stringa. Se non ne trova, il valore della stringa sarà 0.
    Non mi risulta. Se entrambi gli operandi sono stringhe, viene effettuato il controllo alfabetico.

  4. #4
    Non sono ferrato in materia, l'ho trovato in questa lezione, vedi le ultime considerazioni prima del paragrafo sugli operatori logici.

  5. #5
    E' fondamentale la differenza tra
    codice:
    $b = 5;
    e
    codice:
    $b = '5';

  6. #6
    Quindi l'assegnazione dello 0 come valore a una stringa che inizia per lettera avviene solo per confronti tra numeri e stringhe?
    In quel caso che ho esposto, essendo due stringhe a confronto, prevale la regola che tutte le lettere sono maggiori dei numeri, giusto?

  7. #7
    Originariamente inviato da Gas75
    Quindi l'assegnazione dello 0 come valore a una stringa che inizia per lettera avviene solo per confronti tra numeri e stringhe?
    In quel caso che ho esposto, essendo due stringhe a confronto, prevale la regola che tutte le lettere sono maggiori dei numeri, giusto?
    Le stringhe vengono convertite in numeri quando vengono utilizzate in contesto numerico. Il contesto numerico e' - ad esempio - forzato quando l'operazione e' una somma (perche' la somma col + si usa solo per i numeri, il PHP ha un operatore separato per la concatenazione di stringhe), ma non e' automaticamente forzato quando si usa un operatore di confronto, visto che gli operatori di confronto si usano sia per stringhe che per numeri. In quest'ultimo caso il contesto numerico e' forzato quando uno dei due operandi e' un numero, se entrambi gli operandi sono stringhe rimane il contesto di stringa e quindi viene effettuato il controllo sulla base dell'ordine alfabetico ASCII (per cui i numeri vengono prima delle lettere).

  8. #8

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 © 2025 vBulletin Solutions, Inc. All rights reserved.