Phpでは、($myvariable==0)
$ myvariableがゼロの場合、式の値はtrueです。 $ myvariableがnullの場合、この式の値もtrueです。 2番目のケースを除外するにはどうすればよいですか?つまり、$ myvariableがゼロの場合にのみ式をtrueにしたいということです。もちろん書くことができます
($myvariable!=null && $myvariable==0 )
しかし、これを行う他のエレガントな方法はありますか?
$myvariable === 0
比較演算子 の詳細をお読みください。
あなたは深い質問をほのめかします:表現はいつ真実である必要がありますか?
以下では、なぜ何をしているのが機能しないのか、howそれを修正します。
多くの言語null
、0
、および空の文字列(""
)はすべてfalseと評価されるため、if
ステートメントは非常に簡潔で直感的になりますが、null
、0
、および""
もすべて異なるタイプです。それらはどのように比較されるべきですか?
このページ は、2つの変数が比較されている場合、変数は次のように変換されることを示しています(最初の一致でテーブルを終了します)
Type of First Type of Second Then
null/string string Convert NULL to "", numerical/lexical comparison
bool/null anything Convert to bool, FALSE < TRUE
したがって、nullと数値を比較しています。したがって、nullと数値の両方がブール値に変換されます。 このページ は、そのような変換ではnull
と0
の両方がFALSE
と見なされることを示しています。
これで、式はfalse==false
になります。これはもちろん正しいことです。
しかし、あなたが望むものではありません。
このページ は、PHPの比較演算子のリストを提供します。
Example Name Result
$a == $b Equal TRUE if $a equals $b after type juggling.
$a === $b Identical TRUE if $a equals $b, AND they are of the same type.
$a != $b Not equal TRUE if $a not equals $b after type juggling.
$a <> $b Not equal TRUE if $a not equals $b after type juggling.
$a !== $b Not identical TRUE if $a not equals $b, or they are not of the same type.
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than/equal TRUE if $a is less than or equal to $b.
$a >= $b Greater than/equal TRUE if $a is greater than or equal to $b.
最初のコンパレータは、現在使用している比較です。前述の変換を実行することに注意してください。
2番目のコンパレータを使用すると、問題が修正されます。 nullと数値は同じ型ではないため、===
演算子のように型変換を実行するのではなく、==
比較はfalseを返します。
お役に立てれば。
ヌルまたはゼロとして識別するには:
is_int($var)
変数が数値または数値文字列の場合。ゼロを識別するには、is_numeric($var)
を使用するか、または_$var === 0
_を使用します。
is_null($var)
変数がNULLの場合
Php関数 is_null() 関数と===
演算子。 !==
も期待どおりに機能します。
($myvariable === 0)
これは、型強制を実行しません。
ゼロが文字列である可能性がある場合は、「ゼロ文字列」のチェックも検討する必要があります
($myvariable === 0 || $myvariable === '0')
2番目の解決策も機能しません。 ===
operator は、問題の解決策です。
$myvariable===0
$a === $b
$ aが$ bと等しく、それらが同じタイプである場合、同一のTRUE
is_null
関数ですが、これは単に$myvariable!=null
私のプロジェクトの1つで同様の問題に直面していましたが、条件の有効な値としてZEROの値も使用していたというわずかな違いがありました。 NULLをゼロやその他の値から分離する単純なロジックを使用して、どのように解決したかを示します。
if (gettype($company_id) === 'NULL') {
$company = Company::where('id', Auth::user()->company_id)->first();
} else {
$company = Company::where('id', $company_id)->first();
}