【 PHP 】PHP8に入門してみた 48日目 PHPの基本 ( 最後?・奥が深い文字列リテラル )

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

データ型

これで打ち止め? 文字列の世界(ヒアドキュメント)

ヒアドキュメントはLinuxの世界ではわりと一般的な機能です。
改行を伴う長い文字列を変数に格納する際に便利です。

PHPではエスケープシーケンス(\r, \n)を使用して改行を表現できます。
でも長い文章だと改行のエスケープシーケンスが入っていると読みづらいですよね。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHPの基本</title>
</head>

<body>
    <?php
    // print命令は指定された文字列を表示するための命令です。
    $msg = 'こんにちは、変数の世界! <br />';

    print $msg;
    print 'こんにちは、皆さん! ';

    print '<br />';

    print "<pre>PHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい\nPHPは楽しい!!!!!</pre>"
    ?>
</body>

</html>

改行されていますが・・・。

ここで登場するのがヒアドキュメントです。

PHPでのヒアドキュメントは<<<EODからEOD;までを文字列リテラルとして識別します。

EODは小文字でも大丈夫です。

以下のように書き換えてみました。
これでコードの可読性を上げることができます。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHPの基本</title>
</head>

<body>
    <?php
    // print命令は指定された文字列を表示するための命令です。
    $msg = 'こんにちは、変数の世界! <br />';

    print $msg;
    print 'こんにちは、皆さん! ';

    print '<br />';

    print <<<EOD
    <pre>
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい
    PHPは楽しい!!!!!
    </pre>
    EOD;
    ?>
</body>

</html>

先ほどの結果と同じですね😊

大事なこと

  • <<<EOD<<<"EOD"は同等(変数やエスケープシーケンスを展開)
  • <<<'EOD'は変数やエスケープシーケンスを展開しない。(なぜかこの構文はヒアドキュメントではなくNowDoc構文と呼ばれることもあるようです)
  • 終了文字(EOD;)の左の空白を基準にして、各行の左の余白は除去される。(このとき、基準より余白が少ない行が存在するとエラーになる)

メモ

Linuxのヒアドキュメントとは少し違う部分があるようです。

PHPPHP

Posted by raika@blog