6.出力

 それでは,PHPでHTMLを出力してみましょう.


print による出力

 先に使った出力の例を使います.

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
      "http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
  <HEAD>
    <TITLE>PHP Test</TITLE>
  </HEAD>
  <BODY>
    <H1>PHP Test</H1>
<?php
  print "Hello\n" ;
?>
  </BODY>
</HTML>

 10行目の print で,出力をおこないます.print はPHPの機能の一部で,print に続く変数や値を出力します.
 PHPは,
  <?php から ?> 以外の部分: そのまま出力
  <?php から ?> の間の部分: 出力命令に従って出力
という処理を行います.
 したがって,上の例をPHPが処理すると,

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
      "http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
  <HEAD>
    <TITLE>PHP Test</TITLE>
  </HEAD>
  <BODY>
    <H1>PHP Test</H1>
Hello 
  </BODY>
</HTML>

と出力され,ブラウザで見ると

PHP Test

Hello

にように表示されます.


ヒアドキュメントによる出力

 文字列の出力が複数に渡る場合は,ヒアドキュメントによる出力が便利です.
 ヒアドキュメントとは,IDという特殊な文字列て,文字列の区切りを指示する方法です.
 例えば,

 1:
 2:
 3:
 4:
 5:
$str = <<<EOD
abcdefg
hijklmn
opqrstu
EOD;

というプログラムでは,$str に abcdefg から opqrstu までの3行の文字列が入ります.
 <<< がヒアドキュメント開始の指示で EOD が ID と呼ばれる文字列終了を意味する文字です.
 5行目に EOD; がありますが,この直前の行までが文字列をして $str に入るます.
 EOD の部分は,5行目にくる文字列との対応が正しければ別の文字であってもかまいません.

 1:
 2:
 3:
 4:
 5:
$str = <<<EOT
abcdefg
hijklmn
opqrstu
EOT;

 5行目の文字列終了の指示は,ID の文字列の後ろに ; がつくことに注意してください.さらに,この行には ID と : 以外の文字を入れないようにして下さい.先頭や末尾に空白があると,文字列終了と正しく認識されません.

 また,文字列の代入だけでなく,直接出力させることもできます.

 1:
 2:
 3:
 4:
 5:
print <<<EOD
abcdefg
hijklmn
opqrstu
EOD;

変数の展開

 ヒアドキュメントを使うと複数行の出力が簡単であることを説明しました.
 しかし,単に複数行を出力するだけなら,下記の方法で全く同じことができます.

ヒアドキュメントを使用
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
<H2>TITLE</H2>
<?php
$a = 0 ;
print <<<EOD
<HR>
Hello!
</HR>
EOD;
$b = 0 ;
      
HTML で出力
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
<H2>TITLE</H2>
<?php
$a = 0 ;
?>
<HR>
Hello!
</HR>
<?php
$b = 0 ;

 太字の部分がPHPのプログラムになります.これは,単に文字を出力する場合であれば,PHPに出力させずに,元のHTMLとしてそのまま表示させる方法です.この方法の方がPHPによる処理が行われないため効率的です.

 ヒアドキュメントによる出力が,単なるHTMLの出力と異なる点は,変数の展開が行われる部分にあります.
 この変数の展開というのは,出力を行う途中で変数を見つけると,「変数の部分」を「変数に内容」に置き換えて出力する機能です.
 例えば,以下のような例になります.

ヒアドキュメントを使用
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
<H2>TITLE</H2>
<?php
$a = 0 ;
print <<<EOD
<HR>
Hello!
値は $a
</HR>
EOD;
$b = 0 ;
      
HTML で出力
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
<H2>TITLE</H2>
<?php
$a = 0 ;
?>

<HR>
Hello!
値は $a
</HR>
<?php
$b = 0 ;
出力結果
<HTML>
<HR>
Hello!
値は 0
<HR>
出力結果
<HTML>
<HR>
Hello!
値は $a
<HR>

 このように,直接,変数名を入れるだけで,その値に置換された出力が得られます.


引用符 ' と,2重引用符 " の違い

 引用符で括られた文字列 'abcd' と,2重引用符で括られた文字列 "abcd" の違いは,変数とエスケープシーケンスの展開を行うかどうかです.

引用符 '  変数・エスケープシーケンスの
展開は行われない.
2重引用符 "
ヒアドキュメント
 変数.エスケープシーケンスの
展開が行われる.

 エスケープシーケンスとは,特殊な文字を表現するための記述方法で,以下のようなものがあります.

\n 改行
\\ \ を表示
\$ $ を表示
\" " を表示

 具体的には,以下のようになります.

2重引用符を使用
 1:
 2:
 3:
 4:
 5:
 6:
 7:
<H2>TITLE</H2>
<HR>
<?php
$a = 0 ;
print "値は $a \n" ;
?>
<HR>
      
HTML で出力
 1:
 2:
 3:
 4:
 5:
 6:
 7:
<H2>TITLE</H2>
<HR>
<?php
$a = 0 ;
print ' 値は $a \n' ;
?>

<HR>
出力結果
<HTML>
<HR>
値は 0
<HR>
出力結果
<HTML>
<HR>
値は $a \n<HR>
改行が行われない点に注目

その他

 変数の展開において,配列の値に置換させたい場合には,
   $a = "値は { $a[0] } " ;
のように,表示したい配列を { } で括ります.