PHP ヒアドキュメントの使い方:2通り
PHPでのヒアドキュメントの使い方…。
職業訓練の講義で教わったのは
1 : print や echo で使う
というものでした。
print <<< EOF〜複数行の文を直接記述〜
$hoge ←変数は展開されるEOF;
てっきり、『print』や『echo』とセットでしか使えないのかと
思ってましたが、変数内で使うこともできるようで…。
2 : 変数内で使う
$name = '田中';
$sex = '男';$hoge = <<< EOF
<p>
私の名前は $name です。<br>
私の性別は $sex です。
</p>
EOF;echo $hoge;
ところで、以前は、ヒアドキュメント内では配列やオブジェクトのメンバ変数は
使えないものと勘違いしていたため、
- 変数に代入してから使う
- 一時的にヒアドキュメントを中断する
- 『printf()』を使う
教えていただきました。
3 : 配列や、メンバ変数を展開させたい
Akazaさん、どうもありがとうございました。m(_ _)m
$hoge = <<< eof
<p>
私の名前は {$obj->name} です。<br>
私の性別は {$sex[0]} です。
</p>
eof;
//なお、通常のダブルクォーテーションで囲まれた文字列でも同じです。
$piyo = "私の出身は {$prefecture[24]} です。";
ちなみに…、
4 : printf()を使う方法
【3】と比べてわかりやすいような…わかりにくいような…?
$hoge = <<< eof
<p>
私の名前は %s です。<br>
私の年齢は %d です。
</p>
eof;
printf($hoge, $obj->name, $obj->age);
追記 2012-09-08
どうでもいいことですが、私はヒアドキュメントの終了の識別子の後のセミコロン(;)は必須だと勘違いしていました。が、そもそもセミコロンは特例として識別子の後につけることを許されているのだそうです。
つまり、本来はこうするべきなのだそうです。
識別子とセミコロンとは、何の関連もないということですね。
$hoge = <<< EOF
abcd
efgh
ijkl
EOF
;
そうなると、今日ちょっとつまづいたことの原因もよく分かりました。
連想配列の値をヒアドキュメントで記述する、というコード。
終了の識別子の後にセミコロンをつけたら、エラーになっちゃいましたよ…(^ ^;)
(CakePHP)
echo $this->Form->textarea('tags', array(
'rows' => 8,
'cols' =>40,
'value'=> <<< EOF
abcd
efgh
ijkl
EOF
));
私の所持しているオライリー本の『プログラミングPHP 第2版』には、セミコロンの特例についてきちんと書かれていました。
おみそれしましたー m(_ _)m