- ベストアンサー
初歩的な質問だと思います。IFの条件文
よろしくお願いします。 PHPリファレンスに,以下のように書いてありました。 <?php if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "$file\n"; } } closedir($handle); } ?> 2行目のifの条件文なのですが,=は代入することを表すから, ()の部分は条件文にならないと思ったのですが,どう解釈すれば良いのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
if ($handle = opendir('.')) { は"."(カレントディレクトリ)をopendir()した結果を $handleに代入したうえで、そのopendirの結果が正常かを if分岐させています。 $handle = opendir('.'); if ($handle ) { を1行で書いていたのと同等です。 つまり、カレントディレクトリが、オープンできればifが成り立ち オープンできなかったら、ifが不成立となります。
その他の回答 (3)
- tany180sx
- ベストアンサー率63% (239/379)
マニュアルより if (式) 文 式が TRUE と評価された場合、 PHP は文を実行します。 どのような値が FALSE と評価されるかについては論理値への変換を参照してください。 ざっくり言うと式の結果がFALSEぽいのでなければ文は実行されます。(ざっくりですよ) print ( $a = 'aaa' ); これは aaa が表示されるので FALSE ではないですよね。 また、 $a; これも式です。 opendir は成功時にはFALSEを返しません。まぁつまり $handle = opendir('.'); if ($handle == true) { ということですがどうでしょう。 ちなみに ! = = や = = = は型も同じかどうか評価します。
お礼
回答ありがとうございます。 やっと理解することができました。。 いま見るとほんと簡単な問題ですね。恥ずかしい限りです(汗)
- asuncion
- ベストアンサー率33% (2127/6289)
true/falseとは、readdir関数の戻り値$fileを論理値に変換した値です。 よって、「0」という名前のディレクトリーがあると、 $fileの中身そのものは"0"という(正しい)名前なのに $fileの論理値はfalseとなってしまい、 おそらく本来の意図とは異なるであろう動きをします。
- ESE_SE
- ベストアンサー率34% (157/458)
その命令文が正常に処理されればTrueが、異常終了すればFalseが返ります。
補足
早速の回答ありがとうございます。 申し訳ありませんが,もう少し詳しく説明して頂けないでしょうか。 どこにtrue, falseの値が返るんでしょうか。
お礼
一番しっくり来ました。 回答ありがとうございます。 まだ分からない点もあるので,また質問するやもしれません。 助かりました!ありがとうございました。