PHP で関数の返り値 を foreach する時は、とりあえず array でキャストしちゃった方が良さげ
確実に配列と分かってるなら問題ないけど、
関数の返り値を 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)
ディスカッション
コメント一覧
まだ、コメントがありません