首頁 > 後端開發 > php教程 > PHP可能會遇到的坑二

PHP可能會遇到的坑二

小云云
發布: 2023-03-21 17:44:01
原創
1284 人瀏覽過

前面我們跟大家分享了PHP可能會掉入的坑一,本文我們接著和大家分享PHP可能會遇到的坑二,希望能幫助大家。

在PHP的實際開發過程中遇到的一些坑,其中有部分是自己的理解不夠而造成的,坑到深處,真是淚流滿面啊。

關於整數與字串比較,這個問題修正過別人一次,最後不想自己也栽進來了,真是難堪,記下來,謹防再犯!

直接來看這個範例:

#
<?php
$foo = 0;
$bar = &#39;a3b4c5&#39;;
if ( $foo < $bar ) {
    echo &#39;output&#39;;
}
登入後複製

會不會有輸出呢,答案是不會,為什麼呢?因為數字跟字串比較時,字串會被轉換成數字,如果你呼叫轉換成整數的函數 intval( $bar ) ,會發現它的值就是0了,自然就不大於0了。如果$bar的值是'3a4b5c',那麼結果就會被輸出了,因為這時字串轉成數字的值是3了。具體的轉換規則,可以參考PHP Manual:

http://us2.php.net/manual/zh/language.types.string.php#language.types.string.conversion

#其實如果$foo被初始化成''的話,用兩個字串比較,也不會出錯了。

接上坑,再來看一個:

#
if ( $foo == &#39;a1b2c3&#39; ) {
    echo &#39;output&#39;;
}
登入後複製

這次會不會被輸出呢?答案是會,原因其實跟上面的相同,'a1b2c3'在比較時被隱式類型轉換成了0。

如上問題解決方法無非是讓兩個數以相同的型別進行比較,而不用進行隱式型別轉換,這時全等號(===)就發揮作用了,因為三個等號不光會比較值,還會比較型別。另外在字串進行比較的時候,如果使用 strcmp() 函數,也不會有這個問題。

再來一例:

#
$checkedKeys = array(&#39;someKey1&#39;, &#39;someKey2&#39;);
$arrTest = array(&#39;someKey1&#39; => &#39;someValue&#39;, &#39;otherValue&#39;);
foreach ($arrTest as $key => $value)
{
	if (in_array($key, $checkedKeys))
	{
		echo "The key valid: $key \n";
	}
}
登入後複製

類似的,這裡會有兩個輸出,第二次輸出的$key是0,理解了嗎?解決方法是在in_array()函數中加上第三個參數並設為true,進行嚴格的類型比較,文檔在這http://php.net/manual/zh/function.in-array.php

php這門語言的一大優點就是靈活,而這也為平時不認真謹慎而寫下的程式碼帶來了隱患。

相關推薦:

PHP可能會掉入的坑一

以上是PHP可能會遇到的坑二的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板