2012-10-03 6 views
5

ここではかなり簡単な質問です。いくつかのコードを見て、私は与えられた変数をブール値に変換するような関数を見てきました。PHPが '!!'を使用してブール値に変換されています

function to_bool($var) { 
    return !!$var; 
} 

かなりシンプルですがどうやって動作しますか?以前はこれを見たことがなく、グーグルは本当にどこにでもいらっしゃっていません。余分な '!'その結果を並べ替えますか? '!$ var'はvarがfalseかどうかをチェックするのに使うことができるので、 '!!' 「偽」を真に、逆に真を真に、逆に真を真に、

+0

私は2つの前にそれを見たことがないので、あなたは '(bool)$ var;を意味しました!変数の前には – rsz

+2

'!'がネゲートするので、2つのダブルネゲートが何でもブール値に変換されます... – jeremy

+0

ダブルネガティブは、それを考えていました。非常に奇妙な。それは完全に信頼できると思いますか? –

答えて

9

どのように動作しますか?

not演算子は、変数を条件に入れます。したがって、結果はブール値です。 2番目の値はその値を反転しません。

それだけではなく、そのような機能よりも、あなたのコード内で明示的なキャストを使用することがより明らかだ:

(bool)$var; 
+0

ペタンティックであるためには、時間的な順序では2番目の 'not'、値を反転させる最初の 'not'は物理的な順序である。 –

+0

@セス:そうです。それは私がそれを意味する方法です。 – webbiedave

3

1つの!は反転されたブール値になるので、2つの反転されないブール値になります。これは、変数の二重否定だと!! 2

!2!false最終結果trueに評価!(true)

に評価されますboolean型として

3

を返しました。 not booleanは、基本的に右オペランドをboolとして扱います。

2

うーん...興味深いです。

まあ、PHPは、変数が "true"か "false"かを判断する際に、特定のルールセットに従います。

特定の演算子を使用すると、強制的にその決定が行われます。たとえば、文字列"a"と整数2.演算子で追加すると、.演算子の目的は連結するため、"a2"となります。

ここで、最初の!は、変数を否定しようとしています。何かを否定するということは、最初にそれをブール値として扱わなければならないことを意味します。次に、2番目の!はそれを否定します。

これは奇妙なやり方です。率直に言って、if ($var)はあなたのif (to_bool($var))と同じ結果になります。

+0

あなたは '!! $ var'が 'to_bool($ var)'をチェックするより速い方法だろうと思いますか?本当に不思議の国のアリス!明らかに、もしあればかなり無視できる差がある! –

+0

'if($ var)'が最も速いですが、違いがごくわずかです。 –

関連する問題