そういえば PHP8 について調べなきゃ。
と書いて一ヶ月もたっていたわい。
変更というよりひたすら機能強化みたい。
筆者に関係ありそうなのは match くらいしかないな。
str_starts_with や str_contains は正規表現でいいし。
#!/usr/bin/env php <?php $text = "最初含む最後"; if (preg_match('/含む/', $text)) echo "@含む@"; if (preg_match('/^最初/', $text)) echo "@最初@"; if (preg_match('/最後$/', $text)) echo "@最後@".PHP_EOL;; //=> @含む@@最初@@最後@ ?>
ね。
match は Python 3.10 にも追加されたし流行なのだろうか。
Python と同じ感じなのか試してみよう。
#!/usr/bin/env php <?php function switch_func($num) { switch($num) { case 1: echo 'one;'; //break; case 1: echo 'once again;'; //break; default: echo 'default;'; } } function match_func($num) { $s = match($num) { 1 => 'one;', 1 => 'once again;', default => 'default;' }; echo $s; } switch_func(1); echo PHP_EOL;; match_func(1); /* output one;once again;default; one; */ ?>
全然違った。
PHP の match は値を返す式で最後にセミコロン必須。
switch とはそもそもの書式が違うので混同するはずがない。
break が不要なのとマッチしなかった場合の処理があるのは Python と同じ。
match 式内で echo とかはできない、戻り値が必要な場面に限定される。
けれどそういう場合 if や switch より圧倒的に短いコードになるね。
Python の match もこんな感じにすれば良かったのに。