1

プリミティブ型のポイントを取得できません===:!==

$a === $b TRUE if $a is equal to $b, and they are of the same type.
$a !== $b TRUE if $a is not equal to $b, or they are not of the same type.

$request->getMethod()GETor POST(as string) を$form->isValid()返し、ブール値のtrueorを返すと仮定するとfalse、次のコード:

if('POST' === $request->getMethod() || (false === $form->isValid())) :
endif;

この短いものに関しては意味があります:

if('POST' == $request->getMethod() || !$form->isValid()) :
endif;
4

4 に答える 4

2

PHPには真の値と偽の値があります。たとえば、0''array()は偽の値です。使用==すると、これらの値が真/偽の値と一致します。

var_dump(true == 'hello'); // true because a not empty string is a truty value
var_dump(false == 0); // true

===値だけでなく型も一致します。

var_dump(true === 'hello'); // false, true is a boolean and 'hello' a string
var_dump(false === 0); // false, false is a boolean and 0 is a string

これは、たとえば、関数が0またはを返すことができる場合に問題になります。falsestrpos


には他の要因もあります==int2 つの異なる型を比較す​​ると、型キャスト値が a になります。

var_dump("123abc" == 123); // true, because '123abc' becomes `123`

パスワードを比較すると、これは問題になります: http://phpsadness.com/sad/47

于 2012-07-22T16:13:01.710 に答える
2

それらは時々必要です。たとえばstrpos、文字列が別の文字列に含まれているかどうかを確認するために使用する場合は、 と区別する必要があり0ますfalse

違う:

if(strpos($haystack,$needle))...

右:

if(strpos($haystack,$needle) !== false)...
于 2012-07-22T16:09:56.430 に答える
1

必要ないかもしれませんが、

(false===$form->isValid())

!$form->isValid()

$form->isValid()最初のステートメントはの値がfalseかどうかをチェックし、2番目のステートメントはfalseの値かどうかをチェックするのと同じではありません。$form->isValid()たとえば、$form->isValid()returnsnullの場合、最初のステートメントはtrueと評価されず、2番目のステートメントは次のように評価されます。本当。

于 2012-07-22T16:13:37.220 に答える
1

==異なるタイプを比較すると、奇妙な動作をすることがあります。たとえば'POST'、 に等しいと見なされ0ます。そのため、多くの人が通常 を使用===しています。これにより、型のジャグリングの問題が回避されます。

あなたの場合、違いはありません。

于 2012-07-22T16:07:04.567 に答える