在日常的开发过程中,==运算符是我们每天都会接触到的东西。这个算子其实埋下了很多坑。今天我们就来看看使用==比较字符串和数字时需要注意的问题。首先看这些代码:echo'"1234"=="1234"is'。('1234'=='1234'),PHP_EOL;echo'"1234"=="\n1234"is'.('1234'=="\n1234"),PHP_EOL;echo'"1234"=="1234"is'.('1234'=='1234'),PHP_EOL;echo'"1234"=="1234"is'.('1234'=='1234'),PHP_EOL;echo'"1234"=="1234\n"是'。('1234'=="1234\n"),PHP_EOL;都是字符串==操作,它们的结果会是什么?"1234"=="1234"是1"1234"=="\n1234"是1"1234"=="1234"是1"1234"=="1234"是"1234"=="1234\n"是的,前面的空格或者制表符会忽略这些符号,也就是说这些字符串在比较的时候进行了类型转换,都是转换为int类型。而如果后面是特殊字符,则会按照字符串类型进行比较,那么纯字符类型呢?echo'"aa"=="aa"是'.('aa'=='aa'),PHP_EOL;echo'"aa"=="\naa"is'.('a'=='\naa'),PHP_EOL;echo'"aa"=="aa"is'.('aa'=='aa'),PHP_EOL;echo'"aa"=="aa"is'.('aa'=='aa'),PHP_EOL;echo'"aa"=="aa\n"is'.('aa'=="aa\n"),PHP_EOL;此时的结果符合我们的预期,是String比较,没有任何形式的转换:"aa"=="aa"is"aa"=="\naa"is"aa"=="aa"is1"aa"=="aa"is"aa"=="aa\n"is根据以上实验结果,当字符串内容为int数据时,字符串的==比较会忽略空格或出现在字符串前面的制表符将它们强制转换为类型int。而只要字符串中包含数字后面的文字或特殊符号,就会以文本方式进行比较,比如纯文本或混合文本(“11aa”、“11n”、“aa11”)。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/%E6%B3%A8%E6%84%8F%EF%BC%81PHP%E4%B8%AD%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%8E%E6%95%B0%E5%AD%97%E7%9A%84%E6%AF%94%E8%BE%83.php参考链接:https://www.php.net/manual/zh/language.operators.comparison.php各媒体平台均可搜索【硬核项目经理】
