PHP で関数の返り値 を foreach する時は、とりあえず array でキャストしちゃった方が良さげ

PHP の glob() 関数を使う

確実に配列と分かってるなら問題ないけど、
関数の返り値を foreach する時は、とりあえず (array) でキャストしといた方が良さげ。

例えば、glob()。(blog じゃないよ glob だよw)。

PHP の glob() はパス名を検索する関数だが、検索にワイルドカードが使えるのでなかなか便利である。

foreach( glob( './ahoaho/*.html' ) as $value ) {
	if( is_file( $value ) === true ) {
		echo $value . "\n";
	}
}

とすれば、./ahoaho/ ディレクトリ内にある .html ファイルの一覧を表示できる。

が、PHP リファレンスの glob() の項を見ると、気になる注意書きがある。

注意:
システムによっては、何もマッチしなかった場合とエラーが発生した場合を区別できないものもあります。

・・・どーいうことだw

本来なら、マッチするファイルがなければ空配列、 失敗なら FALSE なのだが、

「マッチしない場合でも FALSE が返ってくるシステムがある」ということか?

なんか、微妙に分からんが、そーいうことなら

foreach( (array)glob( './ahoaho/*.html' ) as $value ) {
	if( is_file( $value ) === true ) {
		echo $value . "\n";
	}
}

のように、array でキャストしておいた方が無難。

ぶっちゃけ glob() に限らず false が返ってくる可能性がある場合は、foreach する際は、配列にキャストしちゃった方が良さげ。

PHP では false を配列にキャストすると false が配列になるので、エラーも出なくなる。

var_dump( (array)false );

↑ これの結果が ↓ こうなので、

array(1) {
  [0]=>
  bool(false)
}

↓ こんなことしてもエラーにはならない。

foreach( (array)false as $value ) {
	var_dump( $value );
}
bool(false)

IT・ICT

Posted by るな