1.弱类型的比较
- ==等于:数值相等,类型需要转化
- ===全等于:数值相等,类型相同
字符串转化数值遵守的规则:
当一个字符串被当作一个数值来取值,其结果和类型如下:如果该字符串没有包含 ‘.’,’e’ 或 ‘E’ 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 ‘e’ 或 ‘E’ 后面跟着一个或多个数字构成。
举例:
<?php
$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1; // $foo is float (11)
$foo = "10.0 pigs " + 1.0; // $foo is float (11)
?>
我们大概可以总结出如下的规则:当一个字符串被转换为数值时
- 如果一个字符串为 “合法数字+e+合法数字”类型,将会解释为科学计数法的浮点数
- 如果一个字符串为 “合法数字+ 不可解释为合法数字的字符串”类型,将会被转换为该合法数字的值,后面的字符串将会被丢弃
- 如果一个字符串为“不可解释为合法数字的字符串+任意”类型,则被转换为0! 为0…为0
2.strcmp函数的报错返回值
strcmp() 函数比较两个字符串。
strcmp(string1,string2)
返回值 返回值的含义 0 如果两个字符串相等 <0 如果 string1 小于 string2 >0 如果 string1 大于 string2
可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 !!! 也就是虽然报了错,但却判定其相等了。
loading…