変数事前定義:#set ($valok = "hello foxdevelop")
変数の境界 ${} と . によるアクセスの違い
| コード | 描画結果 | 仕様解説 |
|---|---|---|
$valok | hello foxdevelop | 基本的な変数出力 |
$valok.com | hello foxdevelop.com | Velocityはvalokオブジェクトのcnプロパティまたはメソッドを呼び出そうとします。文字列にcnメソッドが存在しないため変数と接尾辞がそのまま出力されます |
${valok}.com | hello foxdevelop.com | {}で変数範囲を固定。変数valok描画後に文字列.comを連結(推奨の記述方法) |
$!valok.com | hellofoxdevelop.com | $!サイレント参照:変数が存在すれば$valokと同等、存在しない場合は空文字を出力し$xxxをそのまま表示しません |
${valok.com} | 空欄 | valok.comプロパティの読み取りを試行。文字列にcomプロパティが無いため変数無しと判断。空文字を得たい場合は$!{valok.com}を使用 |
${valok}.cn ✅ 変数+接尾辞の連結${valok.cn} ❌ valokオブジェクト配下のcnプロパティにアクセス
シングルクォート / ダブルクォート & 変数の結合
| コード | 描画結果 | 仕様解説 |
|---|---|---|
what$valok | whathello foxdevelop | 直接連結、Velocityが自動で変数の境界を判定 |
what$"valok" | what$”valok” | ❌構文エラー。$直後にクォートを置けず変数を解析できません |
what"$valok" | what”hello foxdevelop“ | クォートは単なる文字、テンプレート内では文字列構文として扱われず変数は正常に展開されます |
what'$valok' | what’hello foxdevelop‘ | 上記と同様、シングルクォートも普通の文字です |
$valokwhat | $valokwhat | ❌変数認識失敗!Velocityはvalokwhat全体を変数名とみなし、存在しなければ元のテキストを出力 |
${valok}what | hello foxdevelopwhat | ✅波括弧で境界を固定、変数と文字が繋がる問題を解決 |
まとめ
- 変数が他の文字と続く場合は必ず
${変数名}を使う
誤り:$valokwhat;正しい:${valok}what - 接尾文字列を付けるとき:
${valok}.cn、${valok.cn}と書かない $!変数サイレント参照:変数が無いときは空文字を出力、$xxxが表示されません- テンプレートHTML内の引用符は通常の文字;#set代入文の内部だけシングルクォート(変数展開しない)とダブルクォート(変数展開する)の挙動が異なります
#set($a = "$valok") // ダブルクォート:変数展開、a=hello bamn
#set($a = '$valok') // シングルクォート:変数展開しない、a=$valokCode language: PHP (php)
変数境界に関する補足