• ベストアンサー

初歩的な質問だと思います。IFの条件文

よろしくお願いします。 PHPリファレンスに,以下のように書いてありました。 <?php if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "$file\n"; } } closedir($handle); } ?> 2行目のifの条件文なのですが,=は代入することを表すから, ()の部分は条件文にならないと思ったのですが,どう解釈すれば良いのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

if ($handle = opendir('.')) { は"."(カレントディレクトリ)をopendir()した結果を $handleに代入したうえで、そのopendirの結果が正常かを if分岐させています。 $handle = opendir('.'); if ($handle ) { を1行で書いていたのと同等です。 つまり、カレントディレクトリが、オープンできればifが成り立ち オープンできなかったら、ifが不成立となります。

x_crimson
質問者

お礼

一番しっくり来ました。 回答ありがとうございます。 まだ分からない点もあるので,また質問するやもしれません。 助かりました!ありがとうございました。

その他の回答 (3)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

マニュアルより if (式) 文 式が TRUE と評価された場合、 PHP は文を実行します。 どのような値が FALSE と評価されるかについては論理値への変換を参照してください。 ざっくり言うと式の結果がFALSEぽいのでなければ文は実行されます。(ざっくりですよ) print ( $a = 'aaa' ); これは aaa が表示されるので FALSE ではないですよね。 また、 $a; これも式です。 opendir は成功時にはFALSEを返しません。まぁつまり $handle = opendir('.'); if ($handle == true) { ということですがどうでしょう。 ちなみに ! = = や = = = は型も同じかどうか評価します。

参考URL:
http://jp.php.net/manual/ja/control-structures.if.php
x_crimson
質問者

お礼

回答ありがとうございます。 やっと理解することができました。。 いま見るとほんと簡単な問題ですね。恥ずかしい限りです(汗)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

true/falseとは、readdir関数の戻り値$fileを論理値に変換した値です。 よって、「0」という名前のディレクトリーがあると、 $fileの中身そのものは"0"という(正しい)名前なのに $fileの論理値はfalseとなってしまい、 おそらく本来の意図とは異なるであろう動きをします。

  • ESE_SE
  • ベストアンサー率34% (157/458)
回答No.1

その命令文が正常に処理されればTrueが、異常終了すればFalseが返ります。

x_crimson
質問者

補足

早速の回答ありがとうございます。 申し訳ありませんが,もう少し詳しく説明して頂けないでしょうか。 どこにtrue, falseの値が返るんでしょうか。

関連するQ&A