Smarty3で変数名をいろいろ実験

Smarty3では動的な変数名をちょっと使いやすくなっています。
たとえば以下のように。

例1

{$hoge_1 = 'hoge1'}
{$fuga = '1'}
{$hoge_{$fuga}}

出力:hoge1

これはこれで便利なのですが、たとえば以下のようなことはできない。

例2

$arrs = array(
	'arr_1' => '111',
	'arr_2' => '222',
);
$smarty->assign('arrs',$arrs);

これを出力すると、たとえばこう。

{$arrs.arr_1}

出力:1111

ちゃんと表示される。でも、【例2】のようなことをしようとすると……。

{$arrs.arr_{fuga}}

「1111」を期待したいところだけどfatalで止まっちゃう。

だからやっぱり「ちょっと便利」というかんじなのかなあ、ト。

例3

以下とりとめもなく。

{$hoges = array('hoge','fuga')}
{$hoges|@var_dump}

出力:array(2) { [0]=> string(4) "hoge" [1]=> string(4) "fuga" }
これは期待通り。

{$hoges = array('hoge' => 'foo','fuga' => 'bar')}
{$hoges|@var_dump}

これは、エラー。「=>」はNGらしい。

{$arr1 = array('hoge','fuga')}
{$arr2 = array('foo','bar')}
{$hoges = array($arr1,$arr2)}

こういう代入もいける。

{$hoges = array(array('hoge','fuga'),array('foo','bar'))}

こんなのも大丈夫。

ちなみにこれを出力してみる。

{$hoges.1.1}
{$hoges.1.{$fuga}}
{$hoges.{$fuga}.1}
{if $hoges.1.{$fuga} == 'bar'}
barです。
{/if}

これらはみんなうまくいく。やっぱりチトくせがあるよう。

ジャンル: Web