升級 PHP 8/8.1 後值得調整的一些新寫法

升級 PHP 8/8.1 後,用 PHP CS Fixer 的 Migration 系列 rule set,看看原本專案內哪些部分有新的寫法,整理一篇記錄一下。

更直覺的 str_containsstr_starts_with

相關規則:modernize_strpos

以往我們常使用 strpos 來檢查指定字串是否有包含另一個字串,或者用它來判斷字串的開始:

if (strpos('Foo Bar Baz', 'Foo') !== false) {
  echo 'Found';
}

if (strpos('Foo Bar Baz', 'Foo') === 0) {
  echo 'Start with Foo';
}

現在有簡單的 str_containsstr_starts_with 了,可讀性更佳:

if (str_contains('Foo Bar Baz', 'Foo')) {
  echo 'Found';
}

if (str_starts_with('Foo Bar Baz', 'Foo')) {
  echo 'Start with Foo';
}

更方便的 ::class magic constants

相關規則:get_class_to_class_keyword

以往 ::class 只能用在 Class 名稱後方,想要從 object 取得 Class 名稱需要使用 get_class

$object = new ClassName();  
echo get_class($object);

現在可以直接使用在 object 上了:

$object = new ClassName();  
echo $object::class;

更好讀的八進位數字

相關規則:octal_notation

PHP 8.1 開始支援以 0o 前綴來標示八進位的數字,讓可讀性又進一步提升了。

0644 === 0o644 // true

更安全的 random_int

相關規則:random_api_migration

PHP 7.0 開始就內建的 random_int,一直是官方推薦要採用的亂數函式,比起過去常見的 rand 更安全。

echo random_int();

參考資料



創用 CC 授權條款
本著作由小克製作,以創用CC 姓名標示-相同方式分享 4.0 國際 授權條款釋出。