那些值得思考的PHP问题
1、关于弱类型
函数strpos是返回字符串str2在str1的位置,没有找到则返回false,然而如果在实际应用上返回的位置是0,在if语句中0也被当作false,所以我们需要对false做类型判断,
$str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)!==false) { echo $str1 . " contains " . $str2 ; } else {echo $str1 . "does not contain ".$str2 ; } //输出 yabadabadoo does not contain yaba//改进部分 strpos($str1,$str2) !== false //输出 yabadabadoo contains yaba
2、关于运算符的优先级
关于 x++和x–这个问题其实非常容易遇见,我们只需记住$x++使用最近的值,然后才自增。
运算符的优先级,++ 是明显高于 +,因此先执行++ 再执行 + 。关于运算符的优先级,有的时候我们真的可以通过括号来让我们的程序更让人直观的了解,毕竟代码不光是用于执行的,有的时候或许团队的可读性也是提高效率的一种。
echo $x; echo " "; echo $x+++$x++; echo " "; echo $x; echo " "; echo $x---$x--; echo " "; echo $x; //结果 5 11 7 1 5
3、关于变量的引用
$a = '1'; $b = &$a; $b = "2$b";
4、关于等号和恒等号
//下面是true还是false var_dump(0123 == 123); // false,PHP会默认把0123当作8进制来处理,实际转化为10进制就是83,显然这不是相等的。 var_dump('0123' == 123); // true这里php会非常有趣的将’0123′转换成一个数字而且默认去掉了前面的0也就是123==123 var_dump('0123' === 123);// false很显然上面的问题已经说过了数字和字符串类型不一致。
5、关于自动转换,如果我们在与字符串进行数学运算,实际php会尽可能将字符串中的数组进行转换,如果是数字开头的话则转换成改数字比如”15%”会变成15,如果不是数字开头则会变成0。
$x = 3 + "15%" + "$25" //等同于 $x = 3 + 15 + 0
6、字符串用数组的形式访问
$text = 'John '; $text[10] = 'Doe'; //运行结果为 John D //$text = “John D”(John后面会有连续的5个空格) strlen($text)会返回11,$text[10] = “Doe”给某个字符串具体的某个位置具体字符时候,实际只会把D赋给$text. 虽然$text才开始只有5个自负长度,但是php会默认填充空格