構文記述方法のことで
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」がどれに対応しているのかわからなくなるから。
これって回避方法はあるんだろうか。マニュアルを見ても書いてなさそうだったんだよね。
2008/05/27 at 6:11 PM
こんなのは駄目でしょうか。
<?php
$A = "Y";
?>
<?php if( $A === "X" ) { ?>
XXX です。
<?php } else { ?>
XXX 以外です。
<?php } ?>
2008/05/27 at 10:57 PM
テンプレートエンジンはあまり使わない方ですので、endif などを使います。
if の入れ子が複雑になる場合は、以下のように、インデント(実際にはタブです)を付けてコメントに条件をそのまま入れています。
<?php if($condition): ?>
<?php <tab> if($condition2): ?>
aaaa
<?php <tab> endif // $condition2 ?>
bbbb
<?php else: // $condition ?>
cccc
<?php endif // $condition ?>
もし、Vim を使っているのでしたら、matchit.vim を入れて、以下の設定をしておくと、移動モードで % (Shift+5)を押すと対応する if, else, endif などに飛ぶことができて便利です。
let b:match_words = ‘(:),{:},[:],<:>,<if>:<endif>,<foreach>:<endforeach>,<while>:<wndwhile>’
2008/06/01 at 7:34 AM
初めてご連絡させていただきます。現在、技術者の方を探していて、かおるんさんのカテゴリを見させていただきましたところ、弊社事業にとても近い気が致しまして、ぜひお藩視したくご連絡しました。連絡手段が見つからず、コメントへの書込みを失礼致します。もしご迷惑でなければ、弊社HPをご覧頂き、ご連絡をいただければ幸甚に存じます。どうぞ、よろしくお願い致します。