有人可以解释为什么这段代码输出false而不是true? 或者这是树枝上的错误?
{% set key = 0 %}
{% if(key != 'new') %}
{{'true' }}
{% else %}
{{ 'false' }}
{% endif %}
我在symfony版本2.1.8-dev
中使用twig谢谢
答案 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') %}
,一切都按预期再次运作。