FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » empty - not empty()
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: empty - not empty() [message #176304 is a reply to message #176292] Tue, 20 December 2011 01:14 Go to previous messageGo to previous message
Chuck Anderson is currently offline  Chuck Anderson
Messages: 63
Registered: September 2010
Karma:
Member
J.O. Aho wrote:
> bill wrote:
>> searching the manual gives lots of hits, none of which appear
>> relevant (at
>> least by the title).
>>
>> I had the following code in a scheduling class:
>>
>> if ($ptNum == "empty") {
>> $ptNum = 0;
>> $status= "e";
>> }
>>
>> I pass the string "empty" to the function as a patient number if we are
>> creating an empty appointment slot.
>>
>> now, this fails because with a patient number of 0 the if returns true.
>>
>> I am aware of the function empty() that would work like that, but do not
>> understand why the compare fails with the constant, "empty."
>
> I assume you are comparing 0 and not the string "0", this makes you
> are comparing integer with string, there ain't any type conversion done.

Actually, it is because there *is* an automatic type conversion done
when comparing a string to an int.

"If you compare a number with a string or the comparison involves
numerical strings, then each string is converted to a number and the
comparison performed numerically."

.... http://us.php.net/manual/en/language.operators.comparison.php

> The zero is always equal to a string,

Not true.

"If the string starts with valid numeric data, this will be the value
used. Otherwise, the value will be 0 (zero)."

.....
http://us.php.net/manual/en/language.types.string.php#language.types.string .conversion

> there is a slightly more information at
>
> http://php.net/manual/en/language.operators.comparison.php

You might want to take a closer look at that page.

The literal string "empty" does not begin with a numerical character so
it will be converted to the integer 0.

>> the regular compare is true with the numeric value of zero.
> I fixed the function by making it a strict compare, but would like to
> know why
>
> I would say it's not the right way to compare, use strcmp, is_numeric
> and so on, to make a proper compare instead of using the comparison
> operator.
>

I think you have that backwards. The identical (strict) comparison is
far more efficient than a function call and this it's intended usage.
"===" compares value and type (so no type conversion). Hence the string
"empty" does not equal (===) the integer 0.

--
*****************************
Chuck Anderson • Boulder, CO
http://cycletourist.com
Turn Off, Tune Out, Drop In
*****************************
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: FastCGI + ignore_user_abort
Next Topic: united governments of planet earth
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Tue Nov 26 07:00:17 GMT 2024

Total time taken to generate the page: 0.15759 seconds