Re: How can an elephant count for nothing?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 12 Feb 2009 23:47:31 +0800, huixinchen@xxxxxxxxx (???) wrote:

>Jochem Maas wrote:
>> Clancy schreef:
>>   
>>> While PHP has a lot of nice features, it also has some traps which I am forever falling
>>> into. One which I find particularly hard to understand is how mixed mode comparisons work.
.........
>> you can avoid auto-casting if needed, in a variety of ways:
>>
>> php -r '
>> $foo = "elephant";
>> if (!empty($foo))
>> 	echo "$foo found!\n";
>> if (strlen($foo))
>> 	echo "$foo found!\n";
>> if (is_string($foo) && strlen($foo))
>> 	echo "$foo found!\n";
>> if ($foo !== "")
>> 	echo "$foo found!\n";
>> if ($foo === "elephant")
>> 	echo "$foo found!\n";
>> '
>>
>> those last 2 show how to use 'type-checked' equality
>> testing.

>>   
>because  intval("elephant") == 0;
>intval will convert the string into integer , Strings will most likely 
>return 0 although this depends on the leftmost characters of the string.

This seems to be the nearest to the correct answer. In fact it appears that if you compare
a string with an integer the effective value of the string is the value of the first
character(s), if it/they  are integers, or zero.

	elephant == 0; true
	an elephant == 0; true
	1 elephant == 0; false
	0 elephants == 0; true
	a herd of elephants == 0; true
	7 elephants == 7; true
	9999 elephants == 9999; true

The next question is ' how is the order of conversion determined?' I thought it might have
converted the second element to the same type as the first element, so I reversed the
comparison, but I got exactly the same results, so perhaps it converts from the more
complex type to the simpler type.

Clearly the lesson is to be learnt is not to compare disparate types, unless you really
have to.

One situation where this is unavoidable is if you are searching an arbitrary set of
strings for a given word.  In this case it is essential to do the exact comparison, or you
will get erroneous results.

Thank you all for your suggestions.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux