LoginSignup
0
0

More than 3 years have passed since last update.

PHP8 に文字列判定を改善する関数が導入されます!

Posted at

こんにちは。やまゆです。

PHP8 の RC 版がリリースされ、そろそろ触っても良い感じになってきました。

色々楽しく触ってみていますが、今回は 「文字列関連の新規関数」 を紹介したいと思います。

str_contains

RFC はこちら

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

RFC はこちら

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)

文字列チェックが直感的に出来るようになりましたね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0