首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个Smarty语句总是评估为真?

为什么这个Smarty语句总是评估为真?
EN

Stack Overflow用户
提问于 2014-10-31 19:01:57
回答 3查看 758关注 0票数 0

这是:

代码语言:javascript
复制
{1234|count_characters}

产出:

代码语言:javascript
复制
4

好的。但这一点:

代码语言:javascript
复制
{if 12345|count_characters == 4}
    it's 4
{/if}

输出it's 4。上面的if语句显然应该被计算为false。为什么它总是评价真实?

count_characters智能修饰符只显示字符串或数字中的字符数:

http://www.smarty.net/docsv2/en/language.modifier.count.characters.tpl

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-31 19:12:02

因为{x|y}语法是echo y(x)的一个聪明的短代码.其中echo是重要的

然而,{if y|x ==4 }等同于在xy上执行按位操作(12345|count_characters为true,因为12345是真的,即使count_characters将被测试为常量,如果该常量不存在,则以字符串文字形式进行测试,同时抛出一个通知),将该操作的结果与4 (带有松散类型的真== 4)进行比较,然后如果为真,等等。

票数 0
EN

Stack Overflow用户

发布于 2014-10-31 19:15:05

Smarty不是一种编程语言,而是一种模板标记语言。您已经采取了输出过滤器,并尝试使用它作为一个通用的功能,在一个条件。那是行不通的。

您应该在PHP脚本中保留这样的逻辑。

票数 0
EN

Stack Overflow用户

发布于 2014-11-01 10:35:55

这里的问题是你如何使用它。

如果在PHP中分配这个var:

代码语言:javascript
复制
 $smarty->assign('var',12345);

并使用以下代码(如果要确保它正常工作,可以额外使用一段代码):

代码语言:javascript
复制
{if $var|count_characters == 4}
    it's 4
{elseif $var|count_characters == 5}
    it's 5
{/if}

您将得到输出it's 5 --这是应该得到的。

如果您没有在PHP中分配任何内容,而是在Smarty中分配它,如下所示:

代码语言:javascript
复制
{assign var="var" value="12345"}

{if $var|count_characters == 4}
    it's 4
{elseif $var|count_characters == 5}
    it's 5
{/if}

你会得到it's 5 --它应该是这样的。

正如@MarkBaker提到的,当您使用12345|count_characters时,代码是按位运算符计算的,这里的函数count_characters实际上不是一个函数,它从未启动,您可以在这里编写您想写的任何东西,例如:

代码语言:javascript
复制
{if 12345|count_charact87172368716832ers == 4}
    it's 4
{/if}

而且您将得到it's 4,即使显然没有count_charact87172368716832ers修饰符。

要使它按需要工作,您应该在PHP中赋值变量(如我在第一段代码中所示),或者在Smarty中指定变量(如我在第二段代码中所示),或者在字符串上而不是在int上使用count_characters修饰符:

代码语言:javascript
复制
{if '12345'|count_characters == 4}
    it's 4
{elseif '12345'|count_characters == 5}
    it's 5
{/if}

此代码将按预期工作-您将得到it's 5

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26681702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档