ぜんぜん気にもしてなかったのですが、当然ながらあるようです。
define()は、定数を定義するための関数です。すでに同名の定数が定義されている場合は定数の定義は失敗します。つまり、一度定義した定数を再定義することはできません。
定義してしまえば、頭に「$」が付かないだけで、変数と同じように使えるのですが、ヒアドキュメントの中では展開してくれません。
これをクリアするには、関数の場合と同じようにクラス化すればいいようです。
適当なクラスを作ってnewし、インスタンス変数経由でconstant関数を使う。
共通ファイルの中で定義している静的変数がいくつかあったので、定数に置き換えてみました。 ほぼ全ファイルに影響があるので大変です。
制約や手間まであるのに、なんでわざわざ定数に置き換えるのかというと、Smarty のテンプレートに渡しているからです。
便利なのに意外に見過ごされているのが、$smarty.const変数です。可愛そうなので、取り上げておきます。
$smarty.const変数によってphpでdefine定義した定数をテンプレート内で参照する事ができます。
以前は、定数もassign関数で割り付けていたので、これを知ったときには、orz.な感じでした(笑)。
テンプレートに渡す変数は配列で渡しているので、数が増えても手間ではないのですが、こっちの方がスマートかなと。