twig if block broken for int 0比较。 Symfony2的

时间:2013-05-07 00:27:52

标签: symfony twig

有人可以解释为什么这段代码输出false而不是true? 或者这是树枝上的错误?

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

我在symfony版本2.1.8-dev

中使用twig

谢谢

2 个答案:

答案 0 :(得分:2)

请注意PHP中的Type Juggling。您还可以查看comparison with various types表,看看如果比较整数,字符串或资源中的两种不同类型,手册说:

  

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

要将字符串转换为数字,PHP会从左到右读取您的字符串并尝试转换它。例如,如果您的字符串为'42new',则应该将其变为42。在您的情况下,您的字符串为'new',因此PHP只需将其保留为0

要解决此问题,请始终比较相同类型的内容,例如'0' != 'new'。或者如果你想玩得开心,你可以创建一个Twig扩展来处理类型严格的操作符(===!==),你就不会再遇到麻烦了。

答案 1 :(得分:0)

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

因为key != new转换为key != (int) new而不是(bool) key != (bool) new

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

这方面的简单解决方案是{% if(key ~ '' != 'new') %},一切都按预期再次运作。

相关问题