suin.io

Smartyの{if}の中では、定数を使ってはいけない

suin2011年2月21日

次のSmartyはyesが出力されるでしょうか?それともnoが出力されるでしょうか? 定数 MY_CONSTANT は未定義だとします。

{if $smarty.const.MY_CONSTANT == true} yes {else} no {/if}

正解は、yesが出力されます。 もし定数 MY_CONSTANT が未定義だと、Smarty側で 'MY_CONSTANT' という文字列に解釈されます。 したがって、{if "MY_CONSTANT" == true} となってしまい、真と評価されます。 そうして結果的に、yes が出力されることになります。

防衛プログラミングとして、Smartyの{if}の中では定数を使わないほうがいいかもしれません。どうしても定数をSmartyで使いたい場合は、get_defined_constants(true)で定義済の定数を取得してきて、動的にassignするなどの代替処置をとったほうがいいでしょう。

RELATED POSTS