変数境界に関する補足

変数事前定義:#set ($valok = "hello foxdevelop")

変数の境界 ${}. によるアクセスの違い

コード描画結果仕様解説
$valokhello foxdevelop基本的な変数出力
$valok.comhello foxdevelop.comVelocityはvalokオブジェクトのcnプロパティまたはメソッドを呼び出そうとします。文字列にcnメソッドが存在しないため変数と接尾辞がそのまま出力されます
${valok}.comhello foxdevelop.com{}で変数範囲を固定。変数valok描画後に文字列.comを連結(推奨の記述方法)
$!valok.comhellofoxdevelop.com$!サイレント参照:変数が存在すれば$valokと同等、存在しない場合は空文字を出力し$xxxをそのまま表示しません
${valok.com}空欄valok.comプロパティの読み取りを試行。文字列にcomプロパティが無いため変数無しと判断。空文字を得たい場合は$!{valok.com}を使用


${valok}.cn ✅ 変数+接尾辞の連結
${valok.cn} ❌ valokオブジェクト配下のcnプロパティにアクセス

シングルクォート / ダブルクォート & 変数の結合

コード描画結果仕様解説
what$valokwhathello foxdevelop直接連結、Velocityが自動で変数の境界を判定
what$"valok"what$”valok”❌構文エラー。$直後にクォートを置けず変数を解析できません
what"$valok"what”hello foxdevelopクォートは単なる文字、テンプレート内では文字列構文として扱われず変数は正常に展開されます
what'$valok'what’hello foxdevelop上記と同様、シングルクォートも普通の文字です
$valokwhat$valokwhat❌変数認識失敗!Velocityはvalokwhat全体を変数名とみなし、存在しなければ元のテキストを出力
${valok}whathello foxdevelopwhat✅波括弧で境界を固定、変数と文字が繋がる問題を解決

まとめ

  1. 変数が他の文字と続く場合は必ず ${変数名} を使う
    誤り:$valokwhat;正しい:${valok}what
  2. 接尾文字列を付けるとき:${valok}.cn${valok.cn}と書かない
  3. $!変数 サイレント参照:変数が無いときは空文字を出力、$xxxが表示されません
  4. テンプレートHTML内の引用符は通常の文字#set代入文の内部だけシングルクォート(変数展開しない)とダブルクォート(変数展開する)の挙動が異なります
#set($a = "$valok") // ダブルクォート:変数展開、a=hello bamn
#set($a = '$valok') // シングルクォート:変数展開しない、a=$valokCode language: PHP (php)

変数境界に関する補足

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です