1

有人可以解释为什么这段代码输出假而不是真吗?或者这是树枝中的错误?

{% set key = 0 %}
{% if(key != 'new') %}
    {{'true' }}
{% else %}
    {{ 'false' }}
{% endif %}

我在 symfony 版本 2.1.8-dev 中使用 twig

谢谢

4

2 回答 2

2

请注意 PHP 中的类型杂耍。您还可以查看与各种类型的比较表,看看如果您比较整数、字符串或资源中的 2 种不同类型,手册说:

将字符串和资源转换为数字,通常是数学

要将字符串转换为数字,PHP 从左到右读取您的字符串并尝试转换它。例如,如果你的字符串是'42new',它应该被杂耍到42。在你的情况下,你的字符串是'new',所以 PHP 只是把它留给0.

要纠正此问题,请始终比较相同类型的事物,例如'0' != 'new'. 或者,如果您想玩得开心,您可以创建一个 Twig 扩展来处理类型严格的运算符 ( ===, !==),这样您就不会再遇到麻烦了。

于 2013-05-07T06:34:35.220 回答
0

我从 github ( https://github.com/fabpot/Twig/issues/1079 ) 得到的答案是

因为key != new翻译为key != (int) new(bool) key != (bool) new

这实际上是正确的,并且与 PHP 的行为相同。

解决这个问题的简单方法是{% if(key ~ '' != 'new') %},一切都按预期工作。

于 2013-05-07T01:13:03.110 回答