变量输出 Variable Output

变量输出 Variable Output

变量输出是模板里最常用的语法,形态为 {$变量名}。它可以带属性访问、数组下标、修饰器链、nofilter 标志,也可以写成三元表达式。

一、基本语法

{$变量名}

示例:

{$title}
{$user.name}
{$arr[0]}
{$article.content nofilter}
{$price|string_format:"%.2f"}

引擎内部把「变量/对象/数字常量直接输出」归为 ECHO_ 节点,把「变量三元 {$a ? x : y}」归为 TERNARY 节点,均由 EchoTagCompiler 负责输出策略。

二、输出策略与全局自动转义

EchoTagCompiler 生成 echo 语句时,是否包裹 htmlspecialchars 由下面这个判定决定:

escapeHtml 为真  且  未带 nofilter  且  修饰器链里没有 HTML 转义类修饰器
  → 输出自动经 htmlspecialchars(..., ENT_QUOTES, 'UTF-8')

三个条件缺一不可:

条件 含义
escapeHtml 引擎全局自动转义开关(DouView::setEscapeHtml(true)),默认关闭
nofilter 该输出追加了裸词 nofilter,则强制不转义
已含转义修饰器 修饰器链里已有 |escape(或 |escape:"html")时不再重复转义,避免双重转义

DouPHP 前台默认 escapeHtml = false,此时 {$var} 原样输出;需要输出富文本 HTML 时,惯例写法是 {$xxx.content nofilter}(配合内容渲染器已产出的 HTML)。

三、修饰器链

变量后可用管道符 | 串接多个修饰器,参数用冒号 : 传递,字符串参数需加引号:

{$content|truncate:100|nl2br|strip_tags}
{$title|escape:"html"|default:"默认标题"}
{$create_time|date_format:"%Y-%m-%d %H:%M"}

修饰器从左到右依次作用,前一个的输出是后一个的输入。全部 20 个内置修饰器逐一详解见「变量修饰器 Modifiers」篇。

四、三元输出

变量三元用于「按条件二选一输出」,见「表达式运算 Expressions」篇:

{$user ? '已登录' : '游客'}
{$count > 0 ? $count : '空'}

三元输出同样受全局转义判定约束:escapeHtml 为真且未带 nofilter 时,最终结果会被 htmlspecialchars。

五、注意事项

  • 变量名区分大小写,{$Title} 与 {$title} 是两个变量。
  • 未赋值的变量输出为空(引擎在渲染期抑制了 notice/warning),需要占位文案时用 |default:"..."。
  • 输出对象成员 -> 不被允许,请在控制器侧转成数组再注入(详见「变量访问语法 Variable Access」)。
添加日期: