【问题标题】:Is identical (===) in Twig在 Twig 中是相同的 (===)
【发布时间】:2022-01-24 23:25:45
【问题描述】:

这是 PHP 代码:

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

只有当$var 实际为 0 时它才会“做某事”(如果 $var 没有设置,它就不起作用,所以一切正常)。

但是,Twig 不支持 === 运算符,如果我这样写:

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

它一直在“做某事”(即使没有设置$var)。为了修复它,我写了这样一段代码:

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

这是在 Twig 中进行 === 比较的正确方法,还是我在这里做错了什么?如果错了,应该如何解决?

【问题讨论】:

    标签: php twig


    【解决方案1】:

    您需要在 Twig 中使用 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 documentation for same as 也说明它等同于===。希望对你有帮助!

    【讨论】:

    • 谢谢,这个很有用
    【解决方案2】:

    Twig 没有===,但它有same as。见:https://twig.sensiolabs.org/doc/2.x/tests/sameas.html

    所以你可以写:

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

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

    【讨论】:

    • 感谢您的“相同”。我在考虑也定义了,但即使 var 值为“abc”,它也会启动代码。
    • 更新 - 我发现这段代码需要一些修复。如果我使用与(0)相同 - 它不起作用。它仅在我将其更改为 is same as('0') 时才有效(换句话说,使用 0 时引号似乎是“必须的”)。
    • @MindaugasLi 那么问题出在代码的其他地方。文档说:“这相当于 PHP 中的 ===”。因此,如果它与'0' 一起使用,那么您将var 与具有单个'0' 字符的字符串进行比较,这与0 整数非常不同(0 === '0' 始终为false)。换句话说,您将字符串 "0" 分配给 $var 您认为分配整数的地方。
    • 感谢您的跟进。该变量实际上是通过表单中的 OPTION 输入分配的(其中值 0 用于禁用,值 1 用于启用)
    • Ok :),所以你可以尝试使用 intval() 函数将其强制转换为整数...我猜
    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多