PHP日常注意點-記錄1

junwind發表於2020-09-04

個人記錄一些自己平時寫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 協議》,轉載必須註明作者和本文連結

相關文章