操作符
基础
各种基本运算符可以直接应用于变量值。
示例
{$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
设置为 true,则结果为 OK,否则则为 FAIL。
还有简写 ?:
运算符
$myVar
未设置或被设置为可评估为 false 的值(例如空字符串),则返回 'empty'。如果 $myVar
被设置为可评估为 true 的值,则返回 $myVar
的值。因此,以下命令将返回 'hello'
测试空
如果您觉得“可评估为 false 的值”这个测试范围太广,可以使用 ??
(或 null 合并)运算符,它只在测试值未定义或设置为 null 时触发。
$myVar
未设置或设置为 null,则返回 'empty'。如果 $myVar
被设置为可评估为任何其他值的值,则返回 $myVar
的值。因此,以下命令将返回一个空字符串 ('')