-3

while-condition 句での次の割り当てが機能することはわかっています。

while ($info=mysql_fetch_array($data_jurisdiction))
{
//some stuff
}

$infoいくつかの値が割り当てられ、割り当ての右側が 、 、 、などを返さない限り、while 条件はFALSEループNULL0ますarray()

質問: 言語構文が等価チェックを必要とする代入を行うことは、良い習慣ですか、それとも悪い習慣ですか? Zend Studio はすぐにこれを警告として指摘します。各アプローチの長所と短所は何ですか?

4

3 に答える 3

0

潜在的な問題を難読化し、自分以外の開発者が読むのが難しい場合があるため、しばしば眉をひそめられます。そうは言っても、私は頻繁にそれを行いますが、割り当てとチェックの方法は次のようになります。

while(false !== ($info = mysql_fetch_array($result))) {

} 
于 2013-04-07T18:57:23.943 に答える
0

質問文そのものが間違っています。

「平等の代わりに割り当て」はありません。IF ステートメント (およびその他の制御フロー演算子) は、比較演算子のみに限定されず、ほぼすべての PHP 式を評価できます。そして、言語は決して「等価チェックを期待」しません。言語は、ブール値にキャストして TRUE と比較できる値のみを想定しています。演算子と比較演算子
の間に本質的な関係はありません。IFこれは、独立して使用できる 2 つの異なる演算子です。

つまり、if なしの比較:

$var = $a == $b; // $var now contains boolean value

そして反対:

if ($a + $b) // addition
if (isTrue()) // function
if ($var) // variable

上記のすべての式が評価され、結果がブール値にキャストされ、このブール値が IF ステートメントによってチェックされます。

ですから、自分が何をしているのかを理解していれば大丈夫です。

于 2013-04-07T18:59:00.867 に答える
-1

あなたはすでにあなたの質問で何が問題なのかを見つけました。

通常、問題の解決策は Iterator パターンを使用することです。

$jurisdictions = new MysqlResultIterator($data_jurisdiction);

foreach ($jurisdictions as $info)
{
    // some stuff
}

すべての非mysql_*データベース ライブラリのサポートforeachは、結果セットで直接利用できます。

Foreach は、結果がない場合と次の結果の違いをより明確にします。Iterator パターンを使用すると、結果変数に割り当てずに有効性を表現できます。

于 2013-04-07T18:56:53.507 に答える