2017-04-27 50 views
4

这里是PHP代码:相同(===)在枝杈

if ($var===0) {do something} 

它“不会的东西”,只有当$var实际为0(如果$var没有设置,这是行不通的,所以一切都好)。

然而,嫩枝不支持===运营商,如果我写:

{% if var==0 %}do something{% endif %} 

它“做一些事情”所有的时间(即使$var未设置)。为了解决这个问题,我写了这样的代码:

{% if var matches 0 %}do something{% endif %} 

它是一个正确的方式做===比较的枝条,或我做错了什么吗?如果不对,应该如何解决?

回答

3

您需要桂枝使用same as===比较:

{% set var1=0 %} 
{% set var2='0' %} 

{% if var1 is same as(0) %} 
    var1 is 0. 
{% else %} 
    var1 is not zero. 
{% endif %} 

{% if var2 is same as(0) %} 
    var2 is 0. 
{% else %} 
    var2 is not 0. 
{% endif %} 

{% if var2 is same as('0') %} 
    var2 is '0'. 
{% else %} 
    var2 is not '0'. 
{% endif %} 

下面是一个twigfiddle显示在操作:

https://twigfiddle.com/k09myb

Here is the documentationsame as还指出,它相当于===。希望能帮到你!

+0

谢谢,这个是非常有用的 –

+0

不客气! –

2

枝条没有===,但它代替same as。请参阅:https://twig.sensiolabs.org/doc/2.x/tests/sameas.html

所以,你可以写:

{% if var is same as(0) %}do something{% endif %} 

最终,你可以使用is defined检查变量是否设置。

+0

感谢您的“相同”。我正在考虑的也是被定义的,但即使在var值为“abc”的情况下,它也会启动代码。 –

+0

更新 - 我发现这个代码需要一些修复。如果我使用与(0)相同 - 它不起作用。它只在我将其更改为('0')时才起作用(换句话说,当使用0时,引号看起来“必须”)。 –

+2

@MindaugasLi然后问题在你的代码中的其他地方。该文档说:*“这相当于PHP中的===”*。因此,如果它与'0'一起工作,比将'var'与具有与'0'整数非常不同的'0'字符的字符串进行比较('0 ==='0'总是'假')。换句话说,你在你认为你正在分配一个整数的地方将字符串“0”分配给了“$ var”。 – martin