TopProgramming LanguagePHP > 2013年6月
2013年6月 7日

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

June 7,2013 12:03 AM
Tag:[]
Permalink

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
ヒアドキュメントのサンプルに一部誤りがあったので修正しました。

Comments [0] | Trackbacks [0]
Now loading...
Recent Entries
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2022年
2021年
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3