PHPで複数行の文字列を扱う方法
PHPで複数行の文字列を扱う方法を紹介します。
1.問題点
複数行にわたるテキストを変数に代入したり出力するときに、次のように1行ずつ連結せずに記述する場合があります。
$text = "aaa\n" .
"bbb\n" .
"ccc";
が、もう少し簡単に複数行を記述したいところです。
2.クォーテーションの中で改行する
次のようにクォーテーションの中で改行すれば、そのまま改行として出力されます。
<?php
$text = 'aaa
bbb
ccc';
var_dump($text);
?>
実行結果
string(11) "aaa
bbb
ccc"
ダブルクォーテーションで括れば中の変数も展開します。
<?php
$foo = 'bar';
$text = "aaa
bbb
$foo
ccc";
var_dump($text);
?>
実行結果
string(15) "aaa
bbb
bar
ccc"
3.ヒアドキュメントを利用する
ヒアドキュメント(here document)とは、プログラム中に複数行の文字列を記述し、その文字列を入力されたものとして読み込む機能を指します。
PHPでは「<<<識別子」をヒアドキュメントの宣言、文字列の後方に出現する「識別子」をヒアドキュメントの終了とみなして処理します。
ヒアドキュメントは文字列全体をダブルクォーテーションで囲んだ文字列として扱われます。以下の例は「EOT」を識別子としたヒアドキュメントです。
<?php
$text = <<<EOT
aaa
bbb
ccc
EOT;
var_dump($text);
?>
実行結果
string(11) "aaa
bbb
ccc"
echoと組み合わせて直接出力することもできます。
<?php
echo <<<EOT
aaa
bbb
ccc
EOT;
?>
ヒアドキュメントのメリットとしては、中にある変数が展開されること、中にあるクォーテーションがそのまま出力されることでしょう。
なお、行末の識別子にはセミコロン以外の他の文字が含まれてはいけません。また識別子の前に空白やタブをつけることもできません。
PHP5.3.0以降であれば、ヒアドキュメントの宣言をダブルクォーテーションで囲めます。
<?php
$text = <<<"EOT"
aaa
bbb
ccc
EOT;
var_dump($text);
?>
4.Nowdoc構文を利用する
PHP5.3.0以降ではNowdoc構文が利用可能です。
ヒアドキュメントがダブルクォートで括った文字列として扱われるのに対し、Nowdoc構文はシングルクォーテーションで括った文字列として扱われます。
書き方はヒアドキュメントとほぼ同じですが、「<<<'識別子'」という風にシングルクォーテーションで括ります(行末の識別子はヒアドキュメントと同じように括らない)。
<?php
$text = <<<'EOT'
aaa
bbb
ccc
EOT;
var_dump($text);
?>
2013.07.11
ヒアドキュメントのサンプルに一部誤りがあったので修正しました。
- PHPでvar_dumpの情報をファイルに出力する方法
- PHPで「そのようなファイルやディレクトリはありません」というエラーになる場合の対処
- PHPで「Cannot modify header information - headers already sent by」というエラーになる場合の対処
- PHPで「Parse error: syntax error, unexpected '['」というエラーになる場合の対処
- php.iniファイルのパス・フォルダを探す方法
- PHPで「Fatal error: Maximum execution time of xx seconds exceeded」というエラーになったときの対処
- PHPのpreg_replace()で「The /e modifier is deprecated」となる場合の対処方法
- PHPで改行を削除する方法
- ファイルアップロード後にPHPでファイルサイズを取得する
- PHPのmktime()で取得したタイムスタンプが8ヶ月前になる事象について