こんにちは。やまゆです。
PHP8 の RC 版がリリースされ、そろそろ触っても良い感じになってきました。
色々楽しく触ってみていますが、今回は 「文字列関連の新規関数」 を紹介したいと思います。
str_contains
Laravel などで既に実装されているこの str_contains
ですが、コア関数として実装されることになりました。
str_contains(string $haystack, string $needle): bool
$haystack
$needle
の引数名はほかの str_ 関連関数でも使われますね。
false !== strpos($haystack, $needle)
という直感的でないやり方で現在の関数でも実現出来ますが、より簡単に文字列が中に含まれているかどうかを判定できるようになりました。
if (str_contains($request->getHeaderLine('Content-Type'), 'json')) {
$request = $request->withParsedBody(json_decode((string)$request->getBody(), true));
}
雑実装ですがこういうロジックが分かりやすくなります。
<?php
// 実装例
var_dump(str_contains('Hello', 'He')); // bool(true)
var_dump(str_contains('Hello', '')); // bool(true)
var_dump(str_contains('➡⇦', '➡')); // bool(true)
※空文字は「全ての文字列にヒットする」という判定が一般的なため、 $needle
が空文字列の場合は常に true が返ります。
str_starts_with, str_ends_with
str_contains
より厳しい判定として、指定された $needle
から始まった文字列かどうかを判定する str_starts_with
と、指定された $needle
で終わる文字列かどうかを判定する str_ends_with
も追加されました。
<?php
// 実装例
var_dump(str_starts_with('Hello', 'He')); // bool(true)
var_dump(str_ends_with('Hello', '')); // bool(true)
var_dump(str_starts_with('➡⇦', '➡')); // bool(true)
文字列チェックが直感的に出来るようになりましたね。