与えられた:
if ($variable = get_variable('variable')) {
// ...
}
*$variable = get_variable('variable')* は、Zend Studio で「Assignment in condition」警告をスローします。警告の意味は理解できますが、その背後にある理論的根拠を知っている人はいますか? それは単にコーディング規約、読みやすさの問題などですか?
与えられた:
if ($variable = get_variable('variable')) {
// ...
}
*$variable = get_variable('variable')* は、Zend Studio で「Assignment in condition」警告をスローします。警告の意味は理解できますが、その背後にある理論的根拠を知っている人はいますか? それは単にコーディング規約、読みやすさの問題などですか?
これは、この構成を許可するほとんどの言語の IDE/コンパイラによって発行される非常に一般的な警告です: =
(割り当て) と==
(比較) は非常に似ており、比較はif
ステートメント内でより一般的であるため、警告はそれを知らせるためにあります。本当は比較しようと思っていたところに、間違って割り当てを入れてしまったのかもしれません。
これを行う理由は次のとおりです。
if ($variable = get_variable('variable')) {
// ...
}
に非常に近い:
if ($variable == get_variable('variable')) {
// ...
}
前者は、始めるのに適した方法ではありません。Zend Studio は、後者のケースを意味している可能性が高いと想定しているため、これについて警告します。これが有用なツールではないと言っているわけではありません。while
ファイルを 1 行ずつ読み取る場合 (読み取る行がまだある場合) は、通常、ループ内でより受け入れられます。問題は、すぐに選択するのが難しいことです。
=
equality check の代わりに代入演算子を書くのは非常によくある間違い==
です。
すべての場合において、このように割り当てを括弧で囲むことで、その警告を取り除くことができることを私は知っています。
if (($var = 1))
{
/* ... */
}
私はそれが主にそこにあると信じています。なぜなら、人々は通常二重の等号を忘れているからです。これにより、警告が取り除かれます。
if ($variable = get_variable('variable') != false) {
// ...
}
多くの場合、単なるタイプミスのため、「=」を忘れた場合
if ($a = $b) { /* $a and $b equal? */ }
そのため、IDE はそれを確認することをお勧めします。