「PHPの基礎 - 入出力」の版間の差分

(文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…)
77行目: 77行目:
* echo文は値を返さない。
* echo文は値を返さない。
* echo文は複数の引数を受け付けられるため、変数を多数表示する必要がある場合はecho文の方が記述しやすく、可読性も高くなる。
* echo文は複数の引数を受け付けられるため、変数を多数表示する必要がある場合はecho文の方が記述しやすく、可読性も高くなる。
<br>
==== ヒアドキュメント ====
ヒアドキュメントを活用することにより、長い文字列やテンプレートを見やすく管理することができる。<br>
<br>
ヒアドキュメントの特徴を以下に示す。<br>
* 開始識別子 (EOT等) の後には改行以外の文字を入れてはならない。
* 終了識別子は行頭になければならない。<br><u>ただし、PHP 7.3以降は可能</u>
* 識別子は任意の文字列を使用可能。(EOT, EOD, HTML等)
* <u><<<'EOT'</u> のように引用符で囲むとNowdocとなり、変数展開されない。
* PHP 7.3以降では終了識別子のインデントが可能。
* 文字列結合や関数の引数としても使用可能である。
<br>
よく使用されるユースケースを以下に示す。<br>
* HTMLテンプレート
* SQLクエリ
* メールテンプレート
* JSONデータ
* 設定ファイル
<br>
<syntaxhighlight lang="php">
<?php
// 基本的な使用方法 1
  echo <<<DATA
  <!DOCTYPE html>
  <html lang="ja">
  <head>
      <meta charset="utf-8">
      <title>ヒアドキュメントの基礎</title>
  </head>
  <body>
    <header></header>
    <main>
      <h1>PHPをHTMLの中に埋め込む</h1>
      <p>ヒアドキュメントで出力したHTMLファイル</p>
    </main>
    <footer></footer>
  </body>
  </html>
  DATA;
?>
<?php
// 基本的な使用方法 2
$name = "太郎";
$text = <<<EOT
こんにちは、{$name}さん。
これはヒアドキュメントのサンプルである。
複数行の文字列を簡単に記述することができる。
EOT;
?>
<?php
// Nowdocの例(変数展開されない)
$text2 = <<<'EOD'
こんにちは、{$name}さん。
この中では変数は展開されない。
そのまま {$name} と表示される。
EOD;
?>
<?php
// インデントを保持する例 (PHP 7.3以降)
$html = <<<HTML
    <div class="container">
      <h1>タイトル</h1>
      <p>これは段落である。</p>
    </div>
HTML;
?>
<?php
// 関数の引数として直接使用
// json_encodeは関数である
echo json_encode([
    'description' => <<<JSON
    これは
    JSON形式の
    長い説明文である。
    JSON,
    'title' => 'サンプル'
]);
?>
<?php
// メソッドチェーンでの使用 (PHP 7.3以降)
$message = (new EmailMessage())
    ->setBody(<<<EMAIL
    お問い合わせありがとうございます。
    以下の内容で承りました。
    件名: {$subject}
    EMAIL)
    ->setSubject('自動返信メール');
?>
</syntaxhighlight>
<br><br>
<br><br>