2017-02-21 6 views
0

私は$handle変数は、いずれかのようだと宣言すること、またはif条件内で宣言されていないので、これはどのように機能するかを完全に理解していないよ、次のPHPスクリプト

<?php 

    if ($handle = opendir('files'.'/')) { 
     while ($file = readdir($handle)) { 
      echo $file.'<br>'; 
     } 
    } 

?> 

を理解しようとしています。しかし、それがifの条件の中で宣言されている場合、条件テストは何ですか?同様にwhileループの場合は、それは何のためにテストされていますか?私は直感的にディレクトリリストの終わりをテストしますが、ifの条件が失敗するか、またはwhileの条件が失敗する可能性があります。 ifの使用はエラー処理メソッドのようなものですか?私はPHPでエラー処理を見て、これを見つけられませんでした。

答えて

3

に使用することができる反復可能なのであり、割り当て動作の全体的な値が割り当てられた値です。これが意味することは、あなたがこれを行うときということです:

($handle = opendir('files'.'/')) 

あなたはopendir()の結果に$handleを代入しているだけでなく、文全体は、その結果に評価されます。

PHPでも、有効なオブジェクトはすべて「真実」と見なされるため、ブール値チェックでtrueと評価されます。だから、この:

if ($handle = opendir('files'.'/')) 

$handleからopendir()の結果を割り当てますtrueまたはfalseのためのその割り当ての結果を確認します。したがって、opendir()が失敗した場合、iffalseと表示され、ブロックは入力されません。

whileと同じ、または割り当ての結果を調べる他の操作。

1

これは、あなたがPHP

に変数がif文で同じ時間に作成され、評価されていると逃げることができコーディングスタイルです。 opendirは、失敗するとfalseを返します。これは、if内のコードが実行されないことを意味します。

一般的にこのスタイルではない素晴らしいアイデアのコードの多くの場合、この種のは、実際にそれはあなたがコードをスキャンする場合==、例えばif($variable=true)if($variable==true)は大きく異なるが、見つけることは必ずしも容易ではないことを意図したバグですので、 。

whileループでは$file =の使用がかなり普通の方法であり、何かを反復するために使用されます。

readdir - http://php.net/manual/en/function.readdir.php - PHPでこのスタイル

+0

これは、if条件が失敗する可能性がないことを意味しますか? – Addem

+0

また、私は 'readdir'関数でそのドキュメントを読んでいましたが、何が起こっているのかはまだ分かりませんでした。これは、 'for'ループを使用すべきところで' while'ループを使うように見えます。 – Addem

+0

opendirはfalseを返すことができ、その場合は失敗します – edmondscommerce

2

それぞれの場合、値は変数に割り当てられ、真実性がテストされます。あなたのようにコードを書き換えることができ

:だから

$handle = opendir('files'.'/'); 
if ($handle) { 
    $file = readdir($handle); 
    while ($file) { 
     echo $file.'<br>'; 
     $file = readdir($handle) 
    } 
} 

、これがあれば条件はおそらく失敗することができなかったことを意味するのでしょうか?

opendir()が本当の値を返さないと失敗します。これは、たとえば、ディレクトリが存在しない場合に発生します。

関連する問題