因為php是弱型別語言,所以在型別轉換時會進行隱性轉換,從而產生一些***。
1.在進行比較邏輯運算時的轉換規則:
一、如果比較乙個整數和字串,則字串會被轉換為整數。
字串轉換為整數的規則如下:
當乙個字串被當作數字來求值時,根據以下規則來決定結果的型別和值。
如果包括「.」,「e」或「e」其中任何乙個字元的話,字串被當作 float 來求值。否則就被當作整數。
該值由字串最前面的部分決定。如果字串以合法的數字字元開始到非數字字元結束,就用該數字作為其值,否則其值為 0(零)。合法數字資料由可選的正負號開始,後面跟著乙個或多個數字(可選地包括十進位制分數),後面跟著可選的指數。指數是乙個「e」或者「e」後面跟著乙個或多個數字。
**如下:
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump(1 == "01"); // 1 == 1 -> true;」01「轉換為十進位制的1
var_dump(1 =="1a"); //1==1 -> true
switch ("a") //因為"a"轉換數字時為0,所以輸出"0";
?>
二、如果比較的兩個字串中只有數字和非列印字元,則會忽略這些非列印字元後再轉換為數字後再進行比較:
<?php
echo " \v\f \r 1234" + 1; // 1235
var_export ("\v\f \r 1234" == "1234"); // true
?>
PHP之Trait詳解 轉
php從以前到現在一直都是單繼承的語言,無法同時從兩個基類中繼承屬性和方法,為了解決這個問題,php出了trait這個特性 如下 例項 trait dog class animal class cat extends animal cat new cat cat drive echo cat eat...
PHP中str replace函式的詳解 轉
在實際的程式開發中,執行字串替換操作是一件非常經常的事,對str replace函式的實用也會非常頻繁。這段時間在看 php和mysql web開發 一書看到str replace講解,一段小提示寫到 可以為str replace的三個都使用陣列傳入,但講解比較簡單,於是決定自己的試驗一下該函式在各...
c 引用型別與值型別的區別詳解 轉)
本篇文章是對c 中引用型別與值型別的區別進行了詳細的分析介紹,需要的朋友參考下 解析 clr支援兩種型別 值型別和引用型別。用jeffrey richter clr via c 作者 的話來說,不理解引用型別和值型別區別的程式設計師將會把 引入詭異的陷阱和諸多效能問題 這就要求我們正確理解和使用值型...