Yuriko.Net 個別記事
2006-10-20

Flexy のテンプレートは t という名前のループ変数が使えない
このサイトは、HTML_Template_Flexy というテンプレートシステムを使っていますが、テンプレートに foreach によるループ処理が書けるのが便利なところです。しかし、このループ機構に落し穴がありました。
それは、ループ変数として t という1文字の名前の変数が使えないということです。つまり {foreach:tr_list,id,t} などという書き方ができないのです。t という名前の変数は Flexy が内部的に使うために、ループ変数で使うと上書きされたり汚染されたりして、不可解な動作が発生します。この不可解な動作の原因が「t という名前のループ変数を作った」ことに気がつくまでだいぶ時間がかかってしまいました。
わたしは Perl での経験が長く、Perl では foreach ループ内部で $_ というデフォルト変数が使われることに慣れています。PHP でも似たコーディングをするには、1文字名前の変数を使うことになります。記事ならば $a, 日付ならば $d, コメントならば $c という変数を使ってました。そうすると、トラックバック関連のループ処理に $t という名前の変数を使うのは自然な流れですが、そうすると謎な現象 (描画オブジェクトが壊れる etc) が起きてしまったのです。
原因が分かってからは別の名前にしましたが、PHP でも $_ という名前の変数は使えそうなので、Perl 臭いコードになるけどこれを使ってしまおうかな;-)
トラックバック・コメント »
コメントはありません。
この投稿のコメント・ピン通知 RSS