答えだけ言うと単に型キャストですがw
foreachをまわす時
引数が配列じゃないとこんなメッセージが
Warning: Invalid argument supplied for foreach() in ******** on line 10
がでるかと思うんですが、これを出さないための対応方法。
今までこんな感じに処理してました。
if(is_array($def)){
foreach( $def as $k=>$v){
print $v;
}
}
が、実はこんな foreach の書き方がありました。。
foreach( (array) $def as $k=>$v){
print $v;
}
なるほど。。こういう型キャストの使い方があったのか。。
動作の説明
(array)$def
で $def を array に変換してるんですね。(ちなみにこれを type casting といいます。)
なので foreach のエラー(これは array じゃねーよ!)というエラーがでなくなると。
これでソースが2行も減りました。
ちなみに、 array だけじゃなく object や int もあります。
型の相互変換
でもさすがにこれはひどいな。。
$binary = b”binary string”;
最後
こんな芸当が可能に。
var_dump((object)(int)(string)true);
//string(1) “1” が表示
必殺 チェインタイプキャスティングw
大変勉強になりました。
ちょうどこのエラーで悩んでいたところで
おかげさまで解決できました。
コメントありがとうございます。
このエラー 地味によく出るエラーなので
エラーを消すのもそうですが、
エラーが出ないようにコードを書くのも重要ですよね。
ちょっとした工夫で、すごく便利になる事例だと思います!
とても参考になりました。
どうもありがとうございます。(・∀・)
コメントありがとうございます。
うまくご活用していただけるとうれしいです
ただやっぱり、このエラーがでるということは
ソースコードを書いている自分がきちんと
型を把握できていないということだと思いますので、
そこも注意していきたいですね!
管理人様
お世話になっております。私は株式会社クランツという編集プロダクションの浜野新一と申します。メールアドレスが見当たらなかったので、コメント欄にて失礼いたします。
このたびアスキー・メディアワークスが発行する、初級・中級者向けパソコン活用誌「アスキー・ドットPC」10月号で、「仕事に役立つ無料ソフト100本(仮題)」という特集を組むことになりました。
その中でNeo Inspiration様の「TinyTodo」を、紹介および付録DVD-ROMに収録させていただきたくメールいたしました。
下記に概要を付しますので、ご査収の上ご協力のほど何卒よろしくお願いいたします。
■掲載誌/月刊「アスキー・ドットPC」2009年10月号(2009/8/24発売)
■発行・発売/アスキー・メディアワークス
■企画タイトル/仕事に役立つ無料ソフト100本(仮題)
仕事のあらゆるシーンで役立つ無料ソフトを100本掲載します。
また、付録DVD-ROMにも記事との連動で掲載の無料ソフトを収録を予定いたしております。
■許諾いただきたい点
(1)誌面にソフトの紹介記事(画面キャプチャ含む)、
URL、作者名等を掲載させていただくこと
(2)付録DVD-ROMにソフトを収録させていただくこと
以上になります。お忙しいところ大変恐縮ですが、制作の都合上、
なるべくお早めにお返事をいただければ幸いです。
こちらの都合で多変申し訳ありませんが、ご配慮いただければ幸いです。
ご不明な点や不都合な点がございましたら、何なりとお尋ね下さいませ。
それでは、重ねてよろしくお願い申し上げます。
なお、このコメントはご覧になりましたら削除なさっていただいても構いません。コメントを汚し、申し訳ございませんでした
こちらメールにてご返答させて頂きます。
ありがとうございました。
foreach( (array) $def as $k=>$v){
のキャストの使い方、思いつきもしませんでした。
これまで
if (count($def)) {
foreach($def as $k=>$v) {
…
}
のように記述していました。
これで、インデントが1段階減らすことができます。
すごく参考になりました。ありがとうございます。
コメントありがとうございます。
お役に立てて何よりです。