PHP

【脱strpos】文字列を含む、〜から始まる、〜で終わるの判定【php】

特定の文字列を含むか、特定の文字列から始まるか、特定の文字列で終わるかの判定を使うことはたまにあります。
これだけのために正規表現はコストが高いので使わないのは昔からの定石なのですが、
php7まではstrposによるちょっと分かりにくいハック的な記述を使う必要がありました。

しかし、php8からは直感的に使える関数が実装されたので素直に書けるようになりました。

特定の文字列を含むか

haystack:検索対象の文字列
needle:haystack で調べる部分文字列

旧(php7まで):

strpos($haystack, $needle) !== false

新(php8から):

str_contains($haystack, $needle)

旧はfalseではないという二重否定で、含んでいる場合にtrueなのかfalseなのかが直感的にわかりにくかったのが新では分かりやすくなっていますね。

特定の文字列から始まるか

旧(php7まで):

strpos($haystack, $needle) === 0

新(php8から):

str_starts_with($haystack, $needle)

これは旧でも比較的マシですが、starts_withなのでかなり分かりやすいですね。

特定の文字列で終わるか

haystack:検索対象の文字列
needle:haystack で調べる部分文字列

旧(php7まで):

$length = strlen($needle);
$length > 0 ? substr($haystack, -$length) === $needle : true;

新(php8から):

str_ends_with($haystack, $needle)

これが一番違いますね。旧だとコメントがないと理解するのに時間がかかりそうですが、新だとすぐに分かります。

おまけ

記事を書いたきっかけはIDE使っていない人が旧コードで上げてきたからなのですが、
実はIDEを使っていれば新しい書き方があるよと教えてくれます。

(画像はphpstormです)
プログラミングスキルの上達にも関わってくるのでもしIDEを使っていない人はぜひ使うようにしましょう。

-PHP