有人可以解释为什么这段代码输出假而不是真吗?或者这是树枝中的错误?
{% set key = 0 %}
{% if(key != 'new') %}
{{'true' }}
{% else %}
{{ 'false' }}
{% endif %}
我在 symfony 版本 2.1.8-dev 中使用 twig
谢谢
请注意 PHP 中的类型杂耍。您还可以查看与各种类型的比较表,看看如果您比较整数、字符串或资源中的 2 种不同类型,手册说:
将字符串和资源转换为数字,通常是数学
要将字符串转换为数字,PHP 从左到右读取您的字符串并尝试转换它。例如,如果你的字符串是'42new'
,它应该被杂耍到42
。在你的情况下,你的字符串是'new'
,所以 PHP 只是把它留给0
.
要纠正此问题,请始终比较相同类型的事物,例如'0' != 'new'
. 或者,如果您想玩得开心,您可以创建一个 Twig 扩展来处理类型严格的运算符 ( ===
, !==
),这样您就不会再遇到麻烦了。
我从 github ( https://github.com/fabpot/Twig/issues/1079 ) 得到的答案是
因为key != new
翻译为key != (int) new
不(bool) key != (bool) new
这实际上是正确的,并且与 PHP 的行为相同。
解决这个问题的简单方法是{% if(key ~ '' != 'new') %}
,一切都按预期工作。