web-dev-qa-db-ja.com

Twigで文字列比較演算子はどのように機能しますか?

これはどのように可能ですか?非常に奇妙な問題のようです(非常に単純なものが欠けている場合を除く)。

コード:

{{ dump(nav) }}
{% if nav == "top" %}
    <div class="well">This would be the nav</div>
{% endif %}

出力:

boolean true
<div class="well">This would be the nav</div>

Screenshot

基本的に、trueの場合は出力されますが、trueをチェックすることを意図したものではありません。

31
Scottymeuk

これは簡単に再現可能です。

{% set nav = true %}
{% if nav == "top" %}
ok
{% endif %}

okを表示します。

ドキュメント によると:

Twigはどこでも式を許可します。これらは非常によく似た通常のPHP、そしてPHP快適に感じるはずです。

そして、純粋なPHP次の式でテストする場合:

$var = true;
if ($var == "top") {
  echo 'ok';
}

また、okと表示されます。

ポイントは次のとおりです。異なるタイプの変数を比較しないでください。ここでは、boolと文字列を比較します。文字列が空でない場合、またはゼロだけが含まれていない場合、trueと評価されます。

PHPマニュアル を見て、さまざまなタイプとの比較方法を確認することもできます。

編集

sameas テストを使用して厳密な比較を行い、型ジャグリングの問題を回避できます。

40
Alain Tiemblo