php中關於 和 的理解和認識

2021-07-23 15:30:47 字數 1326 閱讀 7656

var_dump("1" == "1e0");  //true

var_dump("1" == "1ef"); //false

這兩個的結果為什麼不一樣啊.

這確實是乙個很鬱悶的問題,為什麼呢?

當然一點點看原始碼。看相關的引用到函式。

檢視compare_function

在compare_function中, 當倆個比較運算元都是string的時候,會呼叫zendi_smart_strcmp(具體就不貼**了)。

但是如果是strcmp的話,那麼答案的結果應該是這樣的:

var_dump("1" == "1e0");  //false

var_dump("1" == "1ef"); //false

這兩個的結果為什麼不一樣啊.

起碼他們一樣了!!!哈哈。但是php中確實都是乙個true乙個false。媽蛋!!!

沃日,不會吧!當一切可能都不可能的話,那麼不可能就變成了可能。

還是在 zendi_smart_strcmp中,看來不把他貼出來難平猿憤了!原始碼如下:

zend_api void zendi_smart_strcmp(zval *result, zval *s1, zval *s2) /*  else if (ret2!=is_double)  else if (dval1 == dval2 && !zend_finite(dval1)) 

z_dval_p(result) = dval1 - dval2;

zval_long(result, zend_normalize_bool(z_dval_p(result)));

} else

} else

}

果然,對於倆個字串, 會首先判斷他們是否是numeric_string, 如果是,那麼就會轉換成整形來比較.關於轉換就要細看c的strtol函式了!

那麼什麼是numeric string呢? 因為php不區分型別, 所以她採用乙個策略, 當你的變數看起來是乙個數字的時候, 那麼她就認為這個變數是乙個數字. 簡單來說, numeric_string就是表示數字的字串.太坑了吧!所以大家還是用

===吧!!!

var_dump("1" == "1e0"):1,numeric_string策略通過;2,strcmp("1",strtol("1e0"))。

var_dump("1" == "1ef"):1,

numeric_string策略不通過;2,

strcmp("1",

"1ef")。

所以還是多用===!!!!

關於CRM的理解和認識

crm 專案是乙個長期的旅程,不可能一蹴而就,必須作為階段性的有組織來進行,這樣每過一段時間就能有一段時間的收益。從呼叫中心到市場營銷 銷售 服務全都要有,一次到位很難做到 實施crm 重要的是設定正確的策略,企業必須要整合自己的流程和業務操作方法來滿足這個策略。你是不是已經有了乙個以客戶為中心的遠...

關於Golang中 包 的初步認識和理解 二

go的每乙個檔案都是屬於乙個包的,那也就是說go是依靠包的形式來管理檔案和專案目錄結構的package 包的名稱 package utils import goprojects utils utils.代表的是函式名 import util goprojects utils 1.在同乙個包下,不能有...

關於Golang中 函式 的初步認識和理解 二

壓文詩 月夜憶舍弟 露從今夜白,月是故鄉明 前言 大半夜了,明天入職,挺長時間沒上班了,不過我還是想把函式的零散的知識點整理一下,不然上班了,估計時間就不是特別充裕了.golang語言中不支援傳統意義上的過載,會報 函式名 redeclared in this package 函式在此包中重新宣告 ...