-1

これは、一部のプログラミング言語では特殊なケースのようです。PHPのマニュアルでは、意味がわかりません。

(false !== ($file = readdir($handle)))

右側に「代入」、左側に「比較」がありますが、演算子全体とはどういう意味ですか?

これを使用する際に特別な考慮事項はありますか?

4

6 に答える 6

2

これは、次の省略形です。

$file = readdir($handle);
if (false !== $file) {
// etc
}

これは、while ループの条件として最もよく見られます。注意すべき点が 2 つあります。

  1. readdir は空の文字列などの「偽」のものを返す可能性があるため、厳密なチェック (!= ではなく !==) を使用しています。
  2. これは信じられないほど不透明な構文であり、私はこれを私にもたらした後輩を撃ちます。

編集OPの質問に応えて:

PHP には、「緩やかな」値チェックと「厳密な」値チェックの両方があります。緩いチェックでは == および != 演算子を使用し、「真実」と「偽」の値を比較します。False、0、または空の文字列または配列はすべて「false」であるため、条件 ("" == false) は true と評価され、(0 == Array()) も同様です。

厳密なチェックでは、=== と !== を使用します。これは、テストされる変数が同一でなければならないことを意味するため、(0 === false) は false と評価され、(0 === 0) は true と評価されます。

これが readdir 関数にとって何を意味するかを説明するために、マニュアル ページにはそれを説明する大きな赤いボックスがあります。

于 2013-04-24T21:04:05.553 に答える
1

これは、基本的に 2 つのステートメントを 1 つにまとめたものです。

$file = readdir($handle);
if($file !== false) 
{
  //do something
}
于 2013-04-24T21:06:53.390 に答える
1

特に特別なケースではありません。

PHP は readdir() 関数を実行し、結果を $file 変数に代入しようとします。readdir() が成功した場合、$file にはディレクトリの値が含まれます。ただし、失敗した場合は、ブール値の false が含まれます。したがって、PHP は readdir() を実行し、結果が false かどうかをテストします...比較テストの左の値としての false は、単にスタイル上の機能です。

よく見かけます

if (false == $x)

それよりも

if ($x == false)

比較を行うとき。どちらもまったく同じことを行いますが、

if (false = $x)

比較演算子を間違って入力すると、通知がスローされます (エラー ログが有効になっている場合)。

if ($x = false)

通知は表示されず、おそらく意図されていない $x に false の値が割り当てられ、コードに問題やバグが発生する可能性があります

于 2013-04-24T21:01:56.390 に答える
1

分解:

$file = readdir($handle);

if ($file !== false) {

}

のPHPマニュアルから引用readdir

この関数はブール値の FALSE を返す場合がありますが、FALSE と評価される非ブール値を返す場合もあります。詳細については、ブール値のセクションを参照してください。この関数の戻り値をテストするには、=== 演算子を使用します。

于 2013-04-24T21:03:45.517 に答える
0
if (false !== ($file = readdir($handle)))

という意味です

  • $file には値 readdir($handle) が割り当てられます
  • 次に、値が正確に「NOT false」ではないかどうか確認ます

$file = readdir($handle) が値 NULL を返し、次のコードがある場合:

if (false !== ($file = readdir($handle))) {
//do something
}

NULL は false ではないため、「何かをする」が実行されます。

$file が 0 を返す場合 - 0 は false ではないため、"何かを実行" が実行されます。

$file が値 false を返す場合、"何かを実行" は実行されません。

代わりにこのコードがある場合: (1 つ少ない = 演算子)

if (false != ($file = readdir($handle))) {
//do something
}

意味は次のとおりです。

  • $file には値 readdir($handle) が割り当てられます
  • 次に、値の評価が「 NOT false」かどうかをチェックします

NULL は false と評価されるため、「何かを行う」は実行されません。

$file が 0 を返す場合、0 は false と評価されるため、"何かを実行" は実行されません。

$file が値 false を返す場合、"何かを実行" は実行されません。

上記は、!== 演算子がどのように機能するかを説明するためのものです。readdir() 関数は、これらの値 (null、0、false) のすべてを返すわけではありません。

于 2013-04-24T21:26:44.650 に答える