そういえば 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 もこんな感じにすれば良かったのに。