最近は、PHP5.3以降のバージョンが使われるのが普通になってきました。PHP5.4を使っている人も多いでしょう。
PHPのバージョンが上がり、新しい関数が追加されたり、新しい記法が使えるようになっています。
PHP4くらいからPHPを書いている(私のような)人は、定期的に知識を更新しておかないと、他人のコードを見た時に「なんじゃこりゃー」となってしまいます。今回は、ヒアドキュメント周辺の最新事情をまとめてみました。

ヒアドキュメントで文字列を括る例

ヒアドキュメントは、変数に入れたり、

<?php
$hdoc = <<<EOD
hogehoge
EOD;

echoしたりできます。

<?php
echo <<<EOD
hogehoge
EOD;

関数の引数にできたり、

<?php
var_dump( <<<EOD
hogehoge
EOD
);

配列に入れたりもできます。

<?php
$array = array(<<<EOD
piyopiyo
EOD
);

ヒアドキュメントでのダブルクォート

PHP 5.3.0 以降で、ヒアドキュメントの宣言をダブルクォートでくくれるようになりました。ダブルクォートでくくっても変数展開されるわけではありません。(一体何の意味が!)

これはOK

<?php
$message = <<<"EOD"
hogehoge
EOD;

これはNG

<?php
$message = <<<"EOD"
hogehoge
"EOD";

これもNG

<?php
$suffix = 'A';
$message = <<<"EOD{$suffix}"
hogehoge
EODA;

ヒアドキュメントを用いた静的な値の初期化

PHP 5.3.0 から、静的な値の初期化もできるようになったそうです。(自分はまだ使ったことない)

<?php
// 静的変数
function foo()
{
    static $bar = <<<LABEL
Nothing in here...
LABEL;
}

// クラスのプロパティ/定数
class foo
{
    const BAR = <<<FOOBAR
Constant example
FOOBAR;

    public $baz = <<<FOOBAR
Property example
FOOBAR;
}

Nowdoc による文字列のクォートの例

これも PHP5.3.0 からですが、ヒアドキュメントの宣言をシングルクォートでくくるとヒアドキュメントないの変数展開がされなくなります。これを Nowdoc というそうです。

以下の変数 $message の出力結果は、 hoge{$huga}moge になります。

$word = 'huga';
$message = <<<'EOD'
hoge{$huga}moge
EOD;

おわりに

正直「あんまつかわねー」って感じもありますが、こういう差分も大きくなると「ぷぷぷーwwそんなことも知らないんですかww」って言われる可能性があるので、軽く目を通しておきましょう。

参考URL

5 thoughts on “再学習 PHPのヒアドキュメント

  1. oppara より:

    再学習 PHPのヒアドキュメント | この先生きのこるには

  2. hamaco より:

    ふむふむなるほど、眠い。

  3. halt (@halt) より:

    ブログ書いた!ヒアドキュメントについて勉強した! http://t.co/rw7kwlot

  4. RT @halt: ブログ書いた!ヒアドキュメントについて勉強した! http://t.co/rw7kwlot

  5. sh19910711 より:

    ヒアドキュメントで変数を展開しない方法。終端文字列をシングルクオートで括るといいらしい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ねこ認証:9つのパネルの中からねこを3匹選んでください