アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

if ($handle = opendir('.')) {


は"."(カレントディレクトリ)をopendir()した結果を
$handleに代入したうえで、そのopendirの結果が正常かを
if分岐させています。

$handle = opendir('.');
if ($handle ) {
を1行で書いていたのと同等です。

つまり、カレントディレクトリが、オープンできればifが成り立ち
オープンできなかったら、ifが不成立となります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/11 01:02

マニュアルより


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.i …
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/11 03:38

true/falseとは、readdir関数の戻り値$fileを論理値に変換した値です。


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

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

この回答への補足

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

補足日時:2009/03/10 21:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!