フルスタックエンジニアのノウハウ
2021.06.30    2022.06.11

PHPマニュアル要点まとめ#10「型:文字列」

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!


※この記事はPHPマニュアルの解説です。


文字列【要点まとめ】


言語リファレンス > 型 >「文字列」の解説です。
マニュアルページを見ながらご覧ください。


PHPでは、文字列型は「string」と呼ばれ、1文字のデータや、複数の文字が連結された文字列データを扱うことができます。


PHPでは、文字列は内部的にバイト配列で保持しており、Unicodeに対応したコードを保持している訳ではありません。


これについては「文字列型の詳細」に記載されています。


32bit環境での文字列の最大長は2GBになります。


PHPのプログラム内で文字列を指定する方法は、以下の4種類があります。



①引用符(シングルクォーテーション)で括る方法


シングルクォーテーションで囲まれたデータは、文字列として扱われます。



このように、途中で改行してもOKです。



文字列の中にシングルクォーテーション自体を使いたい場合は、直前にバックスラッシュを付けてエスケープします。



バックスラッシュの直後に書かれたシングルクォーテーションは、ただの文字として認識される訳ですね。


バックスラッシュ自体をただの文字として書きたい場合も、直前にバックスラッシュを付ければOKです。



それ以外の、改行コードを意味する特殊コードや変数を書いたとしても、シングルクォーテーションの中では、これらはただの文字列として扱われます。




②二重引用符(ダブルクォーテーション)で括る方法


ダブルクォーテーションで括る場合は、シングルクォーテーションの場合とは異なり、ここに列挙されているような改行コードなどの特殊なコードや、PHPの変数が使用できます。



よって、文字列の中で特殊なコード変数を使いたい場合は「ダブルクォーテーション」、そうでない場合は「シングルクォーテーション」を使うと良いですね。



③ヒアドキュメントでの指定方法


ヒアドキュメントは、小なり(<)の記号を3つ書いた後に好きなIDを付け、それと同じIDが書かれるまでの間の部分が文字列として認識されます。


改行を多く含む長文の文字列を指定したい場合は、シングルクォーテーションやダブルクォーテーションで括る方法よりも、ソースコードが見やすくなりますね。


ダブルクォーテーションで括った場合と同様に、中で特殊なコードや変数を使用することもできます。


なお、IDの部分は、好きな名前を付けることができますが、PHPの変数と同様の命名規則が適用されています。


つまり、英字/数字/アンダースコアを使用することができ、1文字目には数字は使用できません。


ヒアドキュメントを使って指定した文字列を変数に入れることもできますし、関数の引数に指定することもできます。


ヒアドキュメントのID指定部分は、ダブルクォーテーションで括ってもOKです。



④Nowdocでの指定方法


Nowdocは、ヒアドキュメントと同じような指定方法を行いますが、中で特殊なエスケープコードや変数を使うことができません。


ヒアドキュメントのシングルクォーテーション版というイメージですね。


Nowdocで指定する際は、このようにID部分をシングルクォーテーションで括ります。




Nowdocの場合は、このように変数を書いても、そのまま文字列として出力されます。




これら4つの指定方法の内、2番目の「ダブルクォーテーションで括る」方法と、3番目の「ヒアドキュメントを使う」方法の場合は、中で変数を使うことができます。


変数を指定する際は、「単純バージョン」と「複雑バージョン」2つの指定方法があります。


単純バージョンは、このように変数をそのまま書く方法です。




配列を指定したり、クラスのプロパティを指定することもできます。




ただ、この方法だと、変数の後にスペースが開いている場合は、「どこまでが変数なのか?」が判別できるのですが、変数とその後に続く文字が繋がってしまっている場合などは、どこまでが変数なのかを判定することができなくなってしまいます。


そういった場合に使うのが、複雑バージョンの指定方法です。


複雑バージョンでは、このように変数を波括弧で括ります。




こうすることで、「ここまでが変数だよ」ということが明確になり、直後の文字と繋がっている場合にも正常に動作するようになります。




基本的に、ヒアドキュメントの中で変数を指定する際は、波括弧を付けるようにしておくと間違いがないかと思います。


おすすめ記事