PHPで複数行の文字列を扱う方法

PHPで複数行の文字列を扱う方法

Posted at June 7,2013 12:03 AM
Tag:[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
ヒアドキュメントのサンプルに一部誤りがあったので修正しました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)