跳转到内容

操作符

基础

各种基本运算符可以直接应用于变量值。

示例

{$foo + 1}

{$foo * $bar}

{$foo->bar - $bar[1] * $baz->foo->bar() -3 * 7}

{if ($foo + $bar.test % $baz * 134232 + 10 + $b + 10)}
    ...
{/if}

{$foo = $foo + $bar}

备注

尽管 Smarty 可以处理一些非常复杂的表达式和语法,但按照经验,使模板语法保持最小且专注于显示效果是比较好的。如果你发现模板语法变得过于复杂,可以考虑通过插件或修改器将一些不显式处理显示效果的部分移到 PHP 中。

列表

以下是常见运算符列表,必须通过空格将其与周围元素隔开。请注意,[方括号] 中列出的项是可选的。在适用的情况下,显示了相应的 PHP 等价项。

运算符 替换项 语法示例 含义 PHP 等价项
== eq $a eq $b equals ==
!= ne, neq $a neq $b not equals !=
> gt $a gt $b greater than >
< lt $a lt $b less than <
>= gte, ge $a ge $b greater than or equal >=
<= lte, le $a le $b less than or equal <=
=== $a === 0 check for identity ===
! not not $a negation (unary) !
% mod $a mod $b modulo %
is [not] div by $a is not div by 4 divisible by $a % $b == 0
is [not] even $a is not even [not] an even number (unary) $a % 2 == 0
is [not] even by $a is not even by $b grouping level [not] even ($a / $b) % 2 == 0
不为奇数 $a 不为奇数 不是一个奇数(单一比较) $a % 2 != 0
不为奇数 $a 除于 $b 之后不为奇数 不是一个奇数组 ($a / $b) % 2 != 0
$a 在 $b 中 存在于数组中 in_array($a, $b)
不在 $a 不在 $b 中 不存在于数组中 !in_array($a, $b)

三元

您可以使用 ?:(或三元)运算符来测试一个表达式,然后根据测试结果显示第二个或第三个表达式的值。

换句话说

{$test ? "OK" : "FAIL"}
如果将 $test 设置为 true,则结果为 OK,否则则为 FAIL。

还有简写 ?: 运算符

{$myVar ?: "empty"}
如果 $myVar 未设置或被设置为可评估为 false 的值(例如空字符串),则返回 'empty'。如果 $myVar 被设置为可评估为 true 的值,则返回 $myVar 的值。因此,以下命令将返回 'hello'
{$myVar="hello"}
{$myVar ?: "empty"}

测试空

如果您觉得“可评估为 false 的值”这个测试范围太广,可以使用 ??(或 null 合并)运算符,它只在测试值未定义或设置为 null 时触发。

{$myVar ?? "empty"}
如果 $myVar 未设置或设置为 null,则返回 'empty'。如果 $myVar 被设置为可评估为任何其他值的值,则返回 $myVar 的值。因此,以下命令将返回一个空字符串 ('')
{$myVar=""}
{$myVar ?: "this is not shown"}