PHPの文字列は、シングルクォートかダブルクォートで囲んだテキストです。文字列はドット演算子で結合するか($first . ' ' . $last)、ダブルクォートの中に変数を直接書きます:"Hello, $name"。
ドットは任意の2つの値をつないで新しい文字列にします。数値は自動で変換されるので、"Total: " . 42は"Total: 42"になります。
シングルクォートとダブルクォートの違い
ダブルクォートは2つのことを余分に行います。変数をその値に置き換え、\n(改行)や\t(タブ)のようなエスケープシーケンスを対応する文字に変えます。シングルクォートは、\'と\\を除いて、テキストを書いたとおりに出力します。
固定のテキストにはシングルクォートを、変数や\nを入れたいときはダブルクォートを使います。両者の速度差は測れないほど小さいので、その行が読みやすくなるほうを選んでください。
.と.=で文字列を結合する
.=は文字列変数の末尾に追加します。ループの中でテキスト、たとえばHTMLの一部を組み立てるときの定番です。このブロックを実行するとエディターがPageタブを開き、描画されたリストが表示されます。
.と算術演算を混ぜるときは優先順位に注意が必要です。PHP 8以降、+と-は.より強く結びつくので、"Sum: " . 2 + 3は"Sum: 5"になります。括弧を付ければ次に読む人にも明確です:"Sum: " . (2 + 3)。
文字列の中に変数、配列、オブジェクトを入れる
単純な変数は、ダブルクォートの中にそのまま書けば動きます。配列の要素、オブジェクトのプロパティの連鎖、メソッド呼び出しは、式を波括弧で囲みます。波括弧は、変数とそのすぐ後に続く文字を区切る役目も果たします。
波括弧の中でメソッドは動きますが、普通の関数は動きません。最後の行は、$fruitの値の周りに波括弧と関数名をそのまま出力します。関数は文字列の前で呼び出すか、値が多い文字列にはsprintfを使いましょう。
大文字小文字の変換:strtoupper、strtolower、ucfirst、ucwords
これらの関数はバイト単位で動き、aからzの文字しか変えません。アクセント付きの文字、キリル文字、ギリシャ文字を含むテキストには、UTF-8を理解するマルチバイト版を使います。
1文字ずつ読む、文字列を繰り返す
文字列は配列のように添字でアクセスできます。負のオフセットは末尾から数えます。文字数を数える方法はstrlenを参照してください。
よくあるミス:.の代わりに+を使う
JavaScriptでは+で文字列を結合します。PHPの+は常に算術演算で、数値の文字列は数値として足され、数値でないテキストはエラーを投げます。
結合したテキストのはずが数値になっていたり、Unsupported operand types: string + stringが表示されたりしたら、.であるべき+を探してください。
よくある質問
PHPで文字列を結合するには?
ドット演算子を使います:$full = $first . ' ' . $last;。既存の文字列の末尾に追加するには.=を使います:$html .= '<li>Item</li>';。+演算子は数値用で、PHP 8では"Hello" + "World"はTypeErrorを投げます。
PHPのシングルクォートとダブルクォートの違いは何ですか?
ダブルクォートは変数とエスケープシーケンスを置き換えます:"Hi $name\n"は$nameの値と改行を出力します。シングルクォートはほぼすべてを書いたとおりに出力します:'Hi $name\n'はドル記号、名前、バックスラッシュとnを出力します。シングルクォートの中のエスケープは\'と\\だけです。
PHPの文字列の中に配列の値を入れるには?
波括弧で囲みます:"Hello, {$user['name']}"。オブジェクトのプロパティやメソッド呼び出しも同じです:"{$user->getName()}"。単純なキーなら、波括弧なしの"$user[name]"(キーを引用符で囲まない)でも動きます。
PHPで文字列を大文字や小文字にするには?
strtoupper('php')はPHPを、strtolower('PHP')はphpを返し、ucfirst('hello')は最初の文字を、ucwords('hello world')は各単語の先頭を大文字にします。アクセント付きの文字やラテン文字以外のテキストにはmb_strtoupper()とmb_strtolower()を使います。