惠新宸 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.
>>> For instance 
>>>
>>> $string =  'elephant';
>>> If($string == 0) returns true;
>>> If($string != 0) returns false;
>>> If($string === 0) returns false; 
>>>
>>> I know that in this case I should use 'If($string == '')', but I still 
>>> manage to forget.
>>> Can anyone explain clearly why comparing a string with zero gives this 
>>> apparently
>>> anomalous result?
>>>     
>>
>> it's called auto-casting (or auto-typecasting) and it's 'by design'
>> ... welcome to the world of dynamic typing.
>>
>> try this to see it working:
>>
>> php -r '
>> var_dump((integer)"elephant");
>> var_dump((float)"elephant");
>> var_dump((bool)"elephant");
>> var_dump((array)"elephant");
>> var_dump((object)"elephant");
>> var_dump((bool)(integer)"elephant");
>> '
>>
>> 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.
> 
> -- 
> 
> Baidu惠新宸 xinchen.hui* | * SYS *| * (+8610)82602112-7974 *|* Hi:laruence
> 
'2 elephants' != 0

-- 
Thanks!
-Shawn
http://www.spidean.com

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

Reply via email to