PHPからJavaScriptをスマートに呼び出す2つの方法

PHPでアプリとか作るとき、JavaScriptを埋め込むことってよくありますよね。

もちろんJSファイルを読み込むこともありますが、大抵はPHP内に直に書くことが多いです。

ということでPHPコード内でJavaScriptを呼び出し(出力)する方法についてまとめてみます。

PHP内にJS埋め込みする2つの方法

その方法とは次の2つ

  • ヒアドキュメントを使う方法
  • PHP閉じタグを使う方法

この2つをいくつかのコード例と一緒に紹介したいと思います。

ヒアドキュメントを使う方法

まず1つめはヒアドキュメントを使ってJSを埋め込む方法

PHPだとおなじみの構文ですがJSの出力にも使えます。

 

例えば次がヒアドキュメントを使ったJS出力のPHPコード例

<<<EOM  から次の  EOM;  までの内容がそのまま出力されます。

つまり上のコードだと次のようなJavaScriptが出力されるということ

コードをPHP内に書いたままの見た目で一気に出力できるのが便利ですよね。

 

そしてさらに便利な所は変数を簡単に使えることです。

ヒアドキュメント中では  {$変数}  のように  {}  で変数を囲めばその変数が展開されます。

なので次のようにJSコード内に配列などのデータを渡すことも可能

上の例のコンソールへの出力は次の通り

 

もちろん配列だけなく文字列や数値、真偽値などあらゆるデータを渡すこともできます。

だだし次記事でも書いたようにデータごとに渡し方の作法があるので、単純にデータ展開すればいいという訳でもありません。

普通に展開するだけだとJS側で正しくデータ解釈できないので要注意

PHPの閉じタグを使う方法

PHP内でJSコードを出力する方法の2つめが閉じタグを使う方法

閉じタグというのはPHPの開始を表す  <?php  に対応する  ?>  のタグことです。

なので逆に  ?>  と  <?php  で囲ってやればそのままHTMLなどを出力できるという訳です。

 

例えば次が閉じタグを使ったJSコードの出力例

上のコードのように  ?>  から  <?php  で囲った部分までがJSコードとして出力されて呼び出されます。

 

それでこの方法はヒアドキュメントとどう違うのか、

ということですが違いはPHPの構文を出力中に書けることです。

例えば次がJSコード出力中にforeach文を使っているコード例

上のコードでいうなら

<?php foreach( $greetings as $greeting ): ?>  ~  <?php endforeach; ?>

までの部分がPHPコードです。

その間の内容がループして出力されるのでコンソールへの出力結果はこうなります。

コンソール出力しているJSコードは1行ですが、PHPループによって実際は4回出力されます。

 

foreach以外にも  xxx(): endxxx;  のような構文はいくつかあって、対応しているのは次の4つ

  • if(条件式): ~ endif;
  • while(ループ式): ~ endwhile;
  • for(ループ式): ~ endfor;
  • switch(値): ~ endswitch;

基本的で得使われる if、while、for、foreach、switch の5つに対応しているみたいです。(PHP4以上)

これらを使いこなせば長いHTMLやJSコード出力も楽になりそうですね。

ここまでのまとめ

PHPコード内でJavaScriptを埋め込み・呼び出しする方法は次の2つ

  • ヒアドキュメントを使う
    echo <<<EOM  ~  EOM;  までのJSコードを出力
  • PHP閉じタグを使う
    ?>  ~  <?php  までのJSコードを出力

 

そしてそれぞれの方法は次のような場面で使い分けると便利

  • 出力中に変数を展開したいとき
    ヒアドキュメントを使う。変数の中身は  {$変数}  で展開可能
  • 出力中にPHP構文を使いたいとき
    閉じタグで囲む方法を使う。
    <? xxx(式): ?>  ~  <?php endxxx; ?>  の構文が便利

PHP変数しか展開しないときはヒアドキュメント、変数に加えてPHP構文も使いたいときは閉じタグで囲む方法を使う、というように使い分けると良さそうです。

ということでPHP内でJavaScriptを呼び出す方法についてでした。

PHP

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください