個人記錄一些自己平時寫PHP程式碼時,遇到的一些小問題,會不時的更新;
歡迎大家及時指出問題的錯誤,提意見時可以標註具體問題編號,謝謝大家,與君共勉;
1,float資料型別輸出格式問題
$float1 = 1.123;
$float2 = 2.3e3;
$float3 = 8E-5;
var_dump($float1, $float2, $float3); //float(1.123) float(2300) float(8.0E-5)
var_dump(number_format(8E-5, 5)); //string(7) "0.00008"
會發現8E-5沒有輸出為 0.00008 , 這是因為PHP會自動將一些位數太多的數字轉為科學計數法方式顯示
此時如果想輸出為0.00008格式,可以使用number_format(),還得注意,該函式返回的是string
2,使用.
拼接符後,自動轉為字串型別
$a = 12;
$b = 1.3;
$c = true; //轉為1
var_dump($a . $b . $c); //string(6) "121.31"
3,strlen(),strpos()的中文字元處理
strlen() 返回字串的長度,按位元組,英文佔一個,中文一般佔3個;
英文的好說,不用特殊處理,中文的可以使用專門的mb_strlen()
echo strlen('string'); //6
echo strlen('你好!世界'); //15(5箇中文字元*3)
echo strlen('你好!PHP'); //12(三個中文字元*3 + 3個英文)
echo mb_strlen('你好!世界'); //5
echo mb_strlen('你好!PHP'); //6 每個都按字元算
strpos() 用於在指定字串內查詢某段字元是否有出現, 如果在字串中找到匹配,該函式會返回第一個匹配的字元位置。如果未找到匹配,則返回 FALSE。
需要注意的是:字串的第一個位置是0,而不是1;
同樣該函式也有中英文的問題,也需要專門的mb_strpos()函式處理
echo strpos("hello php", "php"); //6
echo strpos("hello php","he"); //0
echo strpos("你好,php", "p"); //9
echo mb_strpos("你好,php", "p"); //3
4,三元運算子 vs NULL 合併運算子 vs 太空船運算子
三元運算子
var_dump(true ? 1 : 2); //1
//要注意這種寫法:a ?: b , a為真,則整個表示式為a,這裡很容易寫法如下,產生錯誤結果
var_dump(!empty($a) ?: 2); //int(2)
$a = 1;
var_dump(!empty($a) ?: 2); //bool(true) 注意結果是true
NULL 合併運算子 a ?? b , a不為null,返回a,否則為b
$a = 0; //為0,[],'' 都是原值,為null才為後面設定的值
var_dump($a ?? 'none'); //int(0)
var_dump($c ?? 'none'); //string(4) "none"
<=>運算子
var_dump(1<=>2); //int(-1)
var_dump('b'<=>'a'); //int(1)
var_dump(5<=>5); //int(0)
var_dump('5'<=>5); //int(0)
本作品採用《CC 協議》,轉載必須註明作者和本文連結