Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[PHP] $mac==0 non funziona. $mac=="0" invec si.

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[PHP] $mac==0 non funziona. $mac=="0" invec si.

Messaggioda Zane » ven gen 26, 2007 1:15 pm

Ciao ragazzi, vi metto a parte di una cosina abbastanza curiosa (almeno per me) che ho appena scoperto (e mi ha fatto perdere una mezzoretta buona in fase di debug [acc2] ).

Codice: Seleziona tutto
$mac="ff";
$mac==0; //Questa ritorna VERO!!
$mac=="0"; //Questa ritorna (giustamente) FALSO!


Un baco da segnalare oppure una mia lacuna culturale? propendo per la seconda [:D]
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara

Messaggioda M@ttia » ven gen 26, 2007 4:09 pm

beh il confronto fra stringa e integer non so come php lo faccia... Credo che

$mac == "0"

interpreti lo 0 come un carattere di una stringa (quindi sono diverse), mentre per lo zero inteso proprio come valore bool, forse il testo viene convertito in bool sempre come 0, non saprei...

A cosa ti serve quel pezzetto? (vedere che la stringa è vuota, ...?).
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Messaggioda M@ttia » sab gen 27, 2007 1:49 pm

Ok ho cercato su un manuale in pdf che scaricai a suo tempo, e dice proprio l'esatto opposto: ti cito i due piccoli pezzetti interessati:

Manuale di M@ttia ha scritto:Converting to boolean

To explicitly convert a value to boolean, use either the(bool) or the (boolean) cast. However, in most cases you do not need to use the cast, since a value will be automatically converted if an operator, function or control structure requires a boolean argument.

When converting to boolean, the following values are considered FALSE:

• the boolean FALSE
• the integer 0 (zero)
• the foat 0.0 (zero)
• the empty string, and the string "0"
• an array with zero elements
• an object with zero elements
• the special type NULL (including unset variables)

Every other value is considered TRUE (including any resource).


Manuale di M@ttia ha scritto:String conversion

When a string is evaluated as a numeric value, the resulting value and type are determined as follows:

The string will evaluate as a foat if it contains any of the characters . , e , or E. Otherwise, it will evaluate as an integer.
The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional
exponent. The exponent is an e or E followed by one or more digits.

When the first expression is astring, the type of the variable will depend on the second expression.

$foo=1+"10.5"; //$fooisfloat(11.5)
$foo=1+"-1.3e3"; //$fooisfloat(-1299)
$foo=1+"bob-1.3e3"; //$fooisinteger(1)
$foo=1+"bob3"; //$fooisinteger(1)
$foo=1+"10SmallPigs"; //$fooisinteger(11)
$foo=1+"10LittlePiggies"; //$fooisinteger(11)
$foo="10.0pigs"+1; //$fooisinteger(11)
$foo="10.0pigs"+1.0; //$fooisfloat(11)
Ultima modifica di M@ttia il sab gen 27, 2007 3:01 pm, modificato 1 volta in totale.
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero


Messaggioda thomas » sab gen 27, 2007 2:03 pm

PHP si comporta così

== confronta se sono uguali
=== confronta se sono identici (uguali e dello stesso tipo)

Manuale PHP ha scritto:If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).


In pratica la stringa viene convertita a numero (intero o float) e poi si fa il confronto con 0.
Dato che la stringa non comincia con un numero, viene valutata a 0.
Quindi 0==0 = TRUE
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda M@ttia » sab gen 27, 2007 2:47 pm

Eheh, quando ho visto che avevi risposto anche tu credevo volessi solo congratularti con lo Zane per aver usato la Variabile chiamata $mac [rotolo]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Messaggioda thomas » sab gen 27, 2007 2:50 pm

M@ttia ha scritto:Eheh, quando ho visto che avevi risposto anche tu credevo volessi solo congratularti con lo Zane per aver usato la Variabile chiamata $mac [rotolo]
Lo so, sono un genio stesso! [^] [^] [^] [^] [^] [^]
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Zane » dom gen 28, 2007 2:42 pm

Grazie mille per il chiarimento!

Però, se posso fare una critica... in un linguaggio loosely typed come PHP mi sarei aspettato un comportamento diverso!
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara

Messaggioda thomas » dom gen 28, 2007 2:44 pm

Zane ha scritto:Grazie mille per il chiarimento!

Però, se posso fare una critica... in un linguaggio loosely typed come PHP mi sarei aspettato un comportamento diverso!


PHP non è ben definibile in una gerarchia di linguaggi.
E' nato tempo fa.
Ha avuto un gran successo col web.
E' straripato dai suoi stessi argini.
E' contraddittorio.
Ora supporta anche le classi.

Insomma.... VOGLIO CONOSCERE RUBY!!
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Zane » lun gen 29, 2007 7:55 pm

W PHP!!! già mi piaceva prima, ma ora che ho imparato ad usarlo ad oggetti è il non plus ultra! [applauso+]

Ruby (on Rails, ma anche senza binari!) mi incuriosice parecchio.. magari più avanti....
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising