本文目錄一覽:
- 1、php運算, 這是bug? 輸出的是 true?
- 2、php程序員寫的代碼為什麼總有bug
- 3、為什麼PHP中 echo (“00000″==”000000”); 返回的值為1? 五個0與六個0的字元串居然相等!
php運算, 這是bug? 輸出的是 true?
不是bug,是你的用法不嚴謹。
直接 echo $x1 == $x2 的確為true,原因是雙等號是不嚴格的比較。php在做==比較時,當發現變數的內容是數字時,會嘗試把數字轉換成整型或浮點型後再比較,由於你給的串太長,導致溢出,參於比較的位數肯定是相等的。
兩個解決方案:
1)使用恆等比較 ===,這個比較能正確處理。
2)兩個字元串比較嚴謹的用法是用strcmp($x1,$x3);看比較的結果值。為0才是兩個串相等。
php程序員寫的代碼為什麼總有bug
弱類型以及即編即譯等等靈活的特性,註定PHP必須要有犧牲一定的穩定性的前提來達到。換句話說,通常JAVA中一些BUG可以通過編譯機制可以儘早的扼殺早搖籃之中,即使是運行期的錯誤,也可以通過編譯機制找到。同時,強類型語言的嚴謹的代碼編寫風格,也不容易出現由弱類型語言中那些讓人又愛又恨的類型自動轉換髮生的意想不到的行為。
最終,我可以認為PHP為了快速開發,做出了他應有的犧牲。把更多的代碼控制權力交給程序員,而不是交給機器,這也意味著代碼的有效性考驗著作為程序員本身的編程能力。更可能是程序員本身對編程思想的理解程度。不過,PHP大多數都是用來開發web站點,而且還有很龐大的社區,以及許多優秀的框架,這些都可以幫助PHP程序員在開發中減少不必要的麻煩。
BUG不可避免,BUG與否決定在你!
個人經驗,少年,你如果要開發應用的話,這個年代不用框架,就等於自己為自己增加N倍的難度。在下推薦幾款框架給你吧:
LARAVAL (強力推薦),YII,codeigniter…….
為什麼PHP中 echo (“00000″==”000000”); 返回的值為1? 五個0與六個0的字元串居然相等!
對於比較運算符「==」,如果比較一個數字和字元串或者比較涉及到數字內容的字元串,則字元串會被轉換為數值並且比較按照數值來進行。
所以,如下字元串中,轉換為數值之後相等而輸出1。
?php
echo (“0″==”000000”);//1
echo (“00000″==”000000”);//1
echo (“12345″==”012345”); //1
echo (“10″==”1e1”); //1
?
而
echo (“12345n”==”012345n”);
由於比較的表達式中兩邊都含有字母,所以均當做字元串來處理而沒有進行轉換,所以沒有輸出1。
另外,當其中的涉及到數字內容的字元串要進行轉換的時候,其開始的值決定轉換後的值,比如:
echo (12345==”012345 我和我的小夥伴們都驚呆了。”); //1
echo (12345==”01234n5″); // 不會輸出1
echo (“12345″==”012345 我和小夥伴們都驚呆了n”); // 這樣也不會輸出1
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232472.html