PHPのヒアドキュメントとは?終端識別子について解説

このQ&Aのポイント
  • PHPでは、ヒアドキュメントという方法を使って複数行の文字列を利用することができます。ヒアドキュメントは、終端識別子を定義し、その終端識別子が出現するまでを文字列とします。終端識別子は行頭から始まり、空白を含めずに改行する必要があります。
  • ヒアドキュメントの中では、変数の展開やダブルクオートのエスケープが可能です。また、HTMLのテンプレートやコマンドラインのヘルプ文など、複数行の文字列を扱う場面で便利です。
  • ヒアドキュメントは、シングルクオートやダブルクオートと異なり、長い文章をシンプルに記述することができます。ダブルクオートのエスケープや改行の手間を省くことができます。
回答を見る
  • ベストアンサー

終端識別子 とは?

 以下PHP参考書の ヒアドキュメント の説明すが、その中に、「終端識別子」とあります。  「終端識別子」とは何のことなのでしょうか!?    もし、以下の説明の中に「終端識別子」があるのでしたら、何にあとるのですか!?   私は読解力にかけるので分かりません!?   宜しくお願いいたします。   P61 ヒアドキュメント    PHPでは複数行又がる長い文字列を手軽に利用する方法として、シングルクオートとダブル クオートのほかにヒアドキュメントという方法があります。ヒアドキュメントはヒアドキュメント 構文(<<<)のあとに終端識別子を定義し、その終端識別子が出現するまでを文字列とします。  終端識別子は必ず行頭から始まり、直前に空白(インデント)を含めず、すぐに改行する必要が あります。また、ヒアドキュメントの中では、ダブルクオートと同様に変数が展開されます。また、ダ ブルクオートはそのままダブルクオートになります。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  <?php $age = 15; $foo = <<<EOI ヒアドキュメントでは、このように、 複数行にわたる文章をそのまま表記することができます。 Tom の年齢は "$age" 歳です。 EOI; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ もちろん、ダブルクオートで通常の文字列を定義するように、複数行にまたがる文字列を定義す ることもできます。しかし、文章の中にダブルクオートが含まれる長い文章などでは、いちいちダブル クオートにエスケープ(\")が必要となり、これで不便な場合があります。ヒアドキュメントは、た とえばHTMLのテンプレートを記述したり、コマンドラインのヘルプ文を作成するなどに役立ち ます。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.1

質問文にある中では EOI が終端識別子。他の文字列を終端識別子として使うことも可能。

Campus2
質問者

お礼

ご回答誠にありがとうございましした。 EOI が終端識別子 ですね^^

Campus2
質問者

補足

プログラミングには向いていません。  分かっているって^^ ま~とくに、日本は法に違反する以外は、何しようが自由だし、とやかく言われる筋合いはないですが!  はいどうぞ!

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>何にあとるのですか!?  読解力もそうですが、表現力(というか自分が書いた内容を投稿する前にチェックする、最低限の注意力)も養ってください。 >構文(<<<)のあとに終端識別子を定義し、その終端 >識別子が出現するまでを文字列とします。 書いているとおりです。 $foo = <<<終端識別子 いろいろな記述 いろいろな記述 いろいろな記述 終端識別子; print $foo; と書きます。例示されたソースでは終端識別子として ECI を使っていますが、他の文字列でもかまいません。 正直、マニュアルを読んで(なおかつソースの例もあって)これが理解できないなら、プログラミングには向いていません。今のうちに諦めた方がいいです。プログラミング能力には確実に「向き・不向き」があります。これ以上やっても報われない努力になる可能性が高いです。

関連するQ&A

  • すみません また宜しくお願いいたします。

    <html> <head> <meta "charset=utf-8" /> <title>P62Nowdoc</title> </head> <body> <?php $age = 15; $foo = <<<'EOI ' Nowdoc(ナウドック)では終端識別子をシングルクオートで囲みます。 複数行にわたる文章をそのまま表記することができます。 Tom の年齢は "$age" 歳です。 この $age は展開されず、 $age のまま出力されます。 EOI; class NowDocTest { const DOCUMENT1 = <<<'EOI' 変数やエスケープ文字を展開しないため、文字列がパースされません。 このため、constに指定できます。 EOI; const DOCUMENT2 = <<<EOI PHP 5.3 からは、変数を含まない、または、ドル文字が適切にエスケープ されていれば、ヒアドキュメントもconstに指定できます。 ドルを含んだ文章は、 \$foo のようにドル文字をエスケープします。 EOI; } ?> </body> </html>  以下実行結果です。  Parse error: syntax error, unexpected '<<' (T_SL) in C:\xampp\htdocs\study.localhost\P62Nowdoc.php on line 12

    • ベストアンサー
    • PHP
  • Apple Script の文字列中に『”』を使う

    Apple Script の文字列のなかに、ダブルクオート「"」を含めるにはどうしたらよいのでしょうか? 例: set TEST_TEXT to ”文字列" の、文字列にダブルクオートを入れたいのです。

    • ベストアンサー
    • Mac
  • 直前のワードとの間にスペースをはさむとは??

    パールの学習をしています 今回も毎度のようにどうでもよいレベルの質問ですが気になってしようがないので誰か教えてください 今読んでるのはプログラミングPerlという750ページもある辞書みたいに分厚い本です^^ これによると 2.3.2.2 文字列リテラル の項目中に次の解説文があります シングルクォート文字列は、直前のワードとの間にスペースをはさむ必要があることに注意しよう。 なぜなら、シングルクォートは、識別子に使うことができる有効な文字(しかし、使わないほうが良い)だからだ。 ということはダブルクォート文字列なら直前のワードとの間にスペースをはさむ必要がないということだと認識したのです これを確認するために次のコードを実行しました $_ = "a""b"; すなわち2つのダブルクォート文字列を、間にスペースをはさまずに使用してみたのです しかし、これはエラーになってしまいました ですので私はシングルクォート文字列だろうがダブルクォート文字列だろうが直前のワードとの間には必ずスペースをはさまないとダメなのではと思い、 パールハッカーの方々から回答をもらいに、ここへ参ったのです この本を読み進めていけば、いずれ謎は解けるでしょうが、とにかく分厚い本なので・・・

    • ベストアンサー
    • Perl
  • HTMLは、シングルクォートかダブルクォートか?

    HTMLで、<img src="images/spr2002.gif" width=130 height=130 border=0 alt="写真"> などクォート文字列がよくでてきますが、文法的にはシングルクォートかダブルクォートのどちらでもOKなのでしょうか? 大抵のHTMLエディタではダブルクォートを採用している事が多いようですが、私的には、PerlやPHPのprint文などでクォート文字列をエスケープする必要がないので、シングルクォートが良いような気がするのですが、みなさん、どちらが望ましいと思われますか?

    • ベストアンサー
    • HTML
  • readLine()の動作(改行と終端)

    readLine()についてですが。 readLine()が終端時にnullを返すということは、 一行の文字列や、最終行はそのままでは 文字列を読み込めない、と理解していいのでしょうか (書き出すほうで、printlnや改行\nなどを付け足す必要あり)。 また、チャットなどで、サーバーが発言を待つ場合、 while(true){ string=buf.readLine(); mychat.sendall(string); } としますが、 これだと、行の終わりと、発言の終わりが、 区別できなくなってしまいます。 できたら、発言の終わり(終端)を待って、文字列 を作成し、行単位でなく、発言単位で、送信した いのですが。 (nullになるまでループさせ、その間、文字列を +で足して行き、nullを受けたら、送信する、 という方法もありそうですが、もっと簡単に できないでしょうか)。 お願いします。

    • ベストアンサー
    • Java
  • また、馬鹿な質問をしてすみません_ _

    また、馬鹿な質問をしてすみません_ _  http://oshiete1.watch.impress.co.jp/qa8456677.html の続きですが、 10行目に 「その終端識別子が出現するまでを文字列とします。」  とありますが、その中に「出現”する”まで」を逆に考えると 「出現”しない”まで」がるあると言うことでしょうか?   もしあるのでしたら、どんなことなのでしょうか!?    宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ダブルクォート、シングルクォート、\について

    こんにちは。 PHPでメールフォームを作ったのですが、2つ問題点があります。 1.テキストフィールドにダブルクォートで文字を囲んで送信すると入力された情報が返されず、何も入力されていないメールが送られてきます。 2.シングルクォート、\をいれると前に\がついてしまいます。(こんなカンジ→\'\\)フォームはHTMLで作成しています。確認画面のフォームにstripcslashes($_POST[name])をかけておりブラウザ上だとシングルクォートと\は除去されているのですが、メールだと除去されてません。 ダブルクォート、シングルクォート、\が付いた文字列をPHP・HTMLにどのように記述すれば、メールにきちんと送られるようになるのでしょうか?

    • 締切済み
    • PHP
  • シングルクォート、ダブルクォート使用方法

    初心者で勉強中です。 相当素人な質問なんですがよろしくお願いします。 Perlで使われる、シングル、ダブルクォートの自分の認識なのですが ・ダブルクォートは変数やエスケープ文字を評価してくれる。 ・シングルはそのまま文字列として出力される。 ということだと思っているのですがただ、『print』の後の表示させる文字列、数字などがシングルで囲まれていたりダブルだったり、またどちらも使わない場合などあるのですがこの使い分けはどのようにすれば良いかわかりません。 単に文字列の場合でもダブルクォートで囲っていたりと・・・ 以下の例ですと use strict; print "Content-type: text/html\n\n"; my $hensu = 1; print $hensu."<br>\n"; $hensu = "moji"; print "$hensu"; 上記をブラウザ出力すると 1 moji となるということなのですが、数字であればダブルクォートで囲まなくても展開されるということでしょうか?また後ろの2行の $hensu = "moji"; print "$hensu"; とは、どちらもダブルクォートで囲む必要があるのでしょうか。 法則性についてどなたか分かるかた、おしえていだだけますでしょうか。

    • ベストアンサー
    • Perl
  • ExelのVBAでダブルクォートをセルに埋めるには?

    文字列の中にダブルクォートを入れるにはどうするのでしょうか? C言語であれば、\" と書くところですが。 ダブルクォートを2つ続けると、Exel上で見ると期待どおりに表示されますが、 テキスト形式に保存してからファイルをみると、ダブルクォート2つ入ってます。 エクセルでデータベース管理をし、VBAでそれを編集して、 HTMLを自動生成するようなツールを作成したいのですが、 ダブルクォートをテキストに吐き出せなくて困っています。

  • parse_ini_fileでダブルクォートを含む値

    parse_ini_fileで読取る設定ファイルでは、 ダブルクォートを含む値を用いることはできないのでしょうか。 ダブルクォートを含んだ値を記述したかったのですが、 設定ファイルのパースエラーになるか、途中で値が切れてしまいました。 以下を試しました。 (PHP 5.0.4 です。) <テストコード> <?php print_r(parse_ini_file("test.ini")); ?> <設定ファイル test.ini の内容> (ダブルクォートを含む) key=val"ue --> 値がvalになる (ダブルクォートをエスケープ) key=val\"ue -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートをエスケープ) key="val\"ue" -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートを二連化) key="val""ue" -->パースエラーが発生し、値がvalになる (全体をシングルクォートで囲む) key='val"ue' -->値が'valになる マニュアルで以下の文が気になったのですが・・。 ( http://jp.php.net/manual/ja/function.parse-ini-file.php ) ----- 引用 ここから ----- 次の文字 {}|&~![()" は、キーで使ってはいけません。 また、値の中で特別な意味を持ちます。 ----- 引用 ここまで ----- ダブルクォートが「値の中で特別な意味」を持つ文字として 指定されていますが、具体的にどのような意味を持つのか分かりませんでした。 ですが、キーとしては禁止されているものの、値に含まれる文字としては禁止されていないようだったので・・。 どなたか詳しい情報ご存知の方いましたらご教授ください。

    • ベストアンサー
    • PHP

専門家に質問してみよう