にっき
2008/02/05 22:39:47
in_array なとらっぷ
去年むうみんが描いたとこでなんだかおかしな動作するっておはなしが出たから調べてみたけど・・・
Enum 代わりに使ってた in_array() でのちぇっくに漏れが出てたみたいにう(´・ω・`;【みかん
漏れっていうか動的型付け言語のおかげで想定外の動作な気がするけど・・・
こ〜どは
こんなかんじしててほんとは『and』か『or』以外はかっとしたかったのに・・・
$type に bool な『true』が入ると in_array() が true を返してくれるみたいにう(つx;【みかん
これはよく見かける動作だからおっけぃってことで・・・
1つ目に true 入れると true が返るにう?(´・ω・`;【みかん
ちゃんと false が返ってるにゃぁ・・・
空っぽのときはどっちでも false が返ってるにゃぁ・・・
true のときは false だったけど今回は true ・・・にう?
もしかしたら・・・
やっぱりどっちも true が返るってことでけっきょくは型の自動変換が原因っぽいにう(´・ω・`;【みかん
bool と数値や文字列を比較するときは数値や文字列を bool に変換してから比較するから
1つでも bool に変換したときに true になる要素が含まれてるとさくっと true 扱いっぽいにう(´ω`;【みかん
ってことは他の自動変換がかかるような組合せでも
やっぱりする〜しちゃうにう・・・ (´・ω・`;【みかん
in_array の3つ目の引数に true を指定して strict も〜どにすれば自動変換しないで比較してくれるけど・・・
ふぉ〜むから入力した値は基本的に全部文字列扱いされるしなんともにう(´ω`;【みかん
今回は引数を別くらすのと間違えただけだったけどこれからは気をつけないとかにゃぁ...〆(´・ω・`;【みかん
Enum 代わりに使ってた in_array() でのちぇっくに漏れが出てたみたいにう(´・ω・`;【みかん
漏れっていうか動的型付け言語のおかげで想定外の動作な気がするけど・・・
こ〜どは
if(!in_array($type,array('and','or')))
{
die('$type がぁゃιぃの');
}
こんなかんじしててほんとは『and』か『or』以外はかっとしたかったのに・・・
$type に bool な『true』が入ると in_array() が true を返してくれるみたいにう(つx;【みかん
var_dump(in_array(2,array(2,5,7,9))); // bool(true)
var_dump(in_array(4,array(2,5,7,9))); // bool(false)
これはよく見かける動作だからおっけぃってことで・・・
var_dump(in_array(false,array(2,5,7,9))); // bool(false)
var_dump(in_array(true,array(2,5,7,9))); // bool(true)
1つ目に true 入れると true が返るにう?(´・ω・`;【みかん
var_dump(in_array(true,array(0,"",false,null))); // bool(false)
ちゃんと false が返ってるにゃぁ・・・
var_dump(in_array(true,array())); // bool(false)
var_dump(in_array(false,array())); // bool(false)
空っぽのときはどっちでも false が返ってるにゃぁ・・・
var_dump(in_array(false,array(0,"",false,null))); // bool(true)
true のときは false だったけど今回は true ・・・にう?
もしかしたら・・・
var_dump(in_array(true,array(0,1))); // bool(true)
var_dump(in_array(false,array(0,1))); // bool(true)
やっぱりどっちも true が返るってことでけっきょくは型の自動変換が原因っぽいにう(´・ω・`;【みかん
bool と数値や文字列を比較するときは数値や文字列を bool に変換してから比較するから
1つでも bool に変換したときに true になる要素が含まれてるとさくっと true 扱いっぽいにう(´ω`;【みかん
ってことは他の自動変換がかかるような組合せでも
var_dump(in_array(0,array('mogera','hoge','mage'))); // bool(true)
やっぱりする〜しちゃうにう・・・ (´・ω・`;【みかん
in_array の3つ目の引数に true を指定して strict も〜どにすれば自動変換しないで比較してくれるけど・・・
ふぉ〜むから入力した値は基本的に全部文字列扱いされるしなんともにう(´ω`;【みかん
今回は引数を別くらすのと間違えただけだったけどこれからは気をつけないとかにゃぁ...〆(´・ω・`;【みかん
こめんと
投稿された内容の著作権はこめんとの投稿者に帰属するっぽいです☆また,現在 IE6 以下で Sleipnir,Lunascape,Donut じゃないゆ〜ざえ〜じぇんとからの描き込みを制限してますです☆
該当しちゃうかたはてきとうにゆ〜ざえ〜じぇんとを偽装しちゃってくださいです(´ω`;【みかん