国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php 字符串和數字比較一些問題

2024-05-04 21:58:07
字體:
來源:轉載
供稿:網友

今天遇到一個問題,調用對方接口,按照接口說明,返回為數字0,1,2等等,其中0標示成功,其他表示不同的錯誤代碼,程序通過 if ($ret == 0) 進行判斷,開始程序是好的,今天出現問題了,由于對方接口修改,直接返回字母字符串作為錯誤信息提示,然后我這邊就悲劇了,上述判斷永遠都為TRUE.

原因在于php是弱類型語言,所以可以對兩個不同類型的變量進行比較操作,但最終進行比較前,php會把某一方轉換稱另一方一樣的類型,這點很重要,如果是字符串和數字進行比較,那么php會把字符串強制轉換稱數字,對于純字母的字符串,那么轉換后就是0了,所以if ($ret == 0) 成了.

PHP手冊/語言參考/運算符/比較運算符 可以找到.

在PHP里當兩個數字型字符串,只含數字的字符串,進行比較的時候是直接轉換成數值進行比較的,如下示例,注意$a和$b兩個變量的最后一位不相等,代碼如下:

  1. //示例1  
  2. <?php  
  3. $a = '511203199106034578';  
  4. $b = '511203199106034579';  
  5. if ($a==$b) {  
  6. echo 'equal';  
  7. else {  
  8. echo 'notEqual';  
  9. }  
  10. ?> 

運行上面的程序卻發現結果為equal,非我們認為的結果,我們把$a與$b分別加一個字母a進去,代碼如下:

  1. //示例2  
  2. <?php  
  3. $a = 'a511203199106034578';  
  4. $b = 'a511203199106034579';  
  5. if ($a==$b) {  
  6. echo 'equal';  
  7. else {  
  8. echo 'notEqual';  
  9. }  
  10. ?> 

這次輸出的是notEqual(正確的結果)

示例1為equal是因為PHP把兩個數字型字符串轉換成數字型,而這兩個數字剛好相等如下示例,代碼如下:

  1. <?php  
  2. $a = 511203199106034578;  
  3. $b = 511203199106034579;  
  4. echo $a// 輸出 5.1120319910603E+17 即511203199106030000  
  5. echo $b// 輸出 5.1120319910603E+17 即511203199106030000  
  6. ?> 

所以我們在示例1中得到的結果是equal,避免出現這種非預期結果的情況是使用類型比較符===如下示例(如果 $a 等于 $b,并且它們的類型也相同),代碼如下:

  1. //示例4  
  2. <?php  
  3. $a = '511203199106034578';  
  4. $b = '511203199106034579';  
  5. if ($a===$b) {  
  6. echo 'equal';  
  7. else {  
  8. echo 'notEqual';  
  9. }  
  10. ?> 

這樣我們就可以得到預期中的notEqual了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥城市| 郧西县| 苍山县| 蛟河市| 洛隆县| 新蔡县| 金川县| 会同县| 富锦市| 云浮市| 西林县| 黄浦区| 从化市| 蓬溪县| 连南| 山东省| 叙永县| 乌兰县| 尖扎县| 芒康县| 黄陵县| 南华县| 德令哈市| 陆河县| 奉贤区| 比如县| 顺昌县| 运城市| 敦煌市| 绥中县| 香河县| 如皋市| 龙山县| 苍南县| 进贤县| 长子县| 乳山市| 黄石市| 永昌县| 抚远县| 新和县|