構文記述方法のことで

2008/05/27 | PHPの基本

PHPで画面出力部分を取り扱う場合はテンプレートエンジンを使うことが多いのだが、管理者向け画面などは凝ったデザインの必要がないので、PHP直書きで記述することも多い(直書きであってもテンプレートとして別ファイルにしているが)。そういった場合での、テンプレート内に制御構造を記述する際のメモ。

「テンプレートエンジンと使わない」といっても、何でもかんでもプログラム本体と同様にprint()とか書いていると当然読みにくくなるので、省略形などを使う。例えば、

「<?php print($str); ?>」のかわりに「<?=$str ?>」とか。

あと制御構造も、

<?php
if($condition){
  print(‘hoge’);
}else{
  print(‘fuga’);
}
?>

などと書くとやっぱりわかりづらいので、以下のように記述している。

<?php if($condition): ?>
hoge
<?php else: ?>
fuga
<?php endif; ?>

でも上記のように制御構造を記述する場合、if節の中にif節という具合に入れ子にできないのが難点だ。だって、どの「endif」がどれに対応しているのかわからなくなるから。

これって回避方法はあるんだろうか。マニュアルを見ても書いてなさそうだったんだよね。

3件のコメント

  1. ます :

    こんなのは駄目でしょうか。

    &lt;?php

    &#36;A = &quot;Y&quot;;

    ?&gt;
    &lt;?php if( &#36;A === &quot;X&quot; ) &#123; ?&gt;

    XXX です。

    &lt;?php &#125; else &#123; ?&gt;

    XXX 以外です。

    &lt;?php &#125; ?&gt;

  2. komura :

    テンプレートエンジンはあまり使わない方ですので、endif などを使います。

    if の入れ子が複雑になる場合は、以下のように、インデント(実際にはタブです)を付けてコメントに条件をそのまま入れています。

    &lt;?php if(&#36;condition): ?&gt;
    &lt;?php &lt;tab&gt; if(&#36;condition2): ?&gt;
    aaaa
    &lt;?php &lt;tab&gt; endif // &#36;condition2 ?&gt;
    bbbb
    &lt;?php else: // &#36;condition ?&gt;
    cccc
    &lt;?php endif // &#36;condition ?&gt;

    もし、Vim を使っているのでしたら、matchit.vim を入れて、以下の設定をしておくと、移動モードで % (Shift+5)を押すと対応する if, else, endif などに飛ぶことができて便利です。

    let b:match_words = ‘(:),&#123;:&#125;,[:],&lt;:&gt;,&lt;if&gt;:&lt;endif&gt;,&lt;foreach&gt;:&lt;endforeach&gt;,&lt;while&gt;:&lt;wndwhile&gt;’

  3. Shirakata :

    初めてご連絡させていただきます。現在、技術者の方を探していて、かおるんさんのカテゴリを見させていただきましたところ、弊社事業にとても近い気が致しまして、ぜひお藩視したくご連絡しました。連絡手段が見つからず、コメントへの書込みを失礼致します。もしご迷惑でなければ、弊社HPをご覧頂き、ご連絡をいただければ幸甚に存じます。どうぞ、よろしくお願い致します。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net