スキップしてメイン コンテンツに移動

PHP8文字列操作の極意

PHP8文字列操作の極意

PHP8の文字列関数

PHP8では文字列操作がさらに簡潔に書けるようになりました。
代表的な関数として、str_containsstr_starts_withstr_ends_withがあります。
これらは文字列が特定のサブ文字列を含むか、先頭または末尾にあるかを高速に判定します。
従来のstrposを使った複雑な条件分岐を置き換えることで、可読性とパフォーマンスが向上します。

これらの関数はマルチバイト文字列に対しても正しく動作します。ただし、文字コードがUTF-8であることが前提です。
文字コードが異なる場合はmb_strposなどのマルチバイト関数を併用する必要があります。

if (str_contains($haystack, $needle)) {
    // 文字列が$needleを含む
}
if (str_starts_with($haystack, $needle)) {
    // 文字列が$needleで始まる
}
if (str_ends_with($haystack, $needle)) {
    // 文字列が$needleで終わる
}

ヒアドキュメントと変数展開

ヒアドキュメントは<<で開始し、同じ識別子で終了します。
変数展開は通常の文字列と同様に行われ、ダブルクオートと同じ挙動をします。
エスケープシーケンスを意識せずに書ける点が魅力です。

$name = "Alice";
$greeting = <<

マルチバイト文字列とエスケープ

マルチバイト文字列に対しても正しく動作します。ただし、文字コードがUTF-8であることが前提です。
文字コードが異なる場合はmb_strposなどのマルチバイト関数を併用する必要があります。

文字列長を測る関数に注意が必要です。
エスケープはXSSやSQLインジェクションを防ぐ基本的な対策です。

$text = "こんにちは、世界!";
$length = mb_strlen($text); // 文字数を取得
$escaped = htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); // エスケープ

まとめると、PHP8での文字列操作はstr_containsなどの新関数で簡潔に書け、ヒアドキュメントで長文を扱い、マルチバイト文字列はmb_strlenで正確に測定し、エスケープで安全性を確保することがベストプラクティスです。

コメント