« 開高健 語録 | メイン | ackerToDo2.2インストール »

いろいろハマる。

その1。

「FlashのduplicateMovieClip()にてはまる」

Flash MX 2004にて。

MovieClipLoader(LoadMovie)にてロードしたJPG画像は、複製できない。
一日くらい悩んだ。ロードしたのがswfなら複製できるらしい。
したがって、
動的にロードしたJPEGのMovieClipは複製できない。けっこう致命的のような・・。複製できないから、結局、同じ画像を別なMCにまたロードすることにした。すごい無駄な気がする。内部でキャッシュされてればいいけど。

Flashって、関数がエラー返してくれないから、どの時点で動いてないのかわからん・・デバッガの使い方もよくわからん〜だれかレクチャーして!

その2。

「PHP のemptyにハマる」

PHPにempty()という関数がある。引数の変数が定義されてるかどうかをtrue/falseで返す。
以下サンプル。

$str = "boofoo";
var_dump(empty($str));
----結果----
bool(false)

これだけ見ると、とくに問題ないように見える。$iは、空じゃないよ。と返してるので。

しかし、次のよく見て。

$i = "000";
var_dump(empty($i));

$j = "0";
var_dump(empty($j));
----結果----
bool(false)
bool(true)


つまり、"000"は、「空じゃない」と処理、"0"は、「空である」と処理している。"0"は、あくまで文字列のゼロであり、「空」ではないはずなのに。
これはかなり致命的なバグなんじゃないだろうか〜

というか、普段emptyなんて使ってないけど、html2fpdfに、データを渡すとき、tableのセルの中が"0"だと、表示されないというバグを追っかけていて発見。

empty()に渡す変数が"0"の場合、true(空である)と返すのは、どうもそういう仕様らしい。しかし、それでセルの表示を省くのは、html2fpdfのバグである。間違いない。


PHP Tips/IF文でのチェック (0と値無しを見分けるにはどうするか?)

とりあえず、自分で作る場合は、emptyを使わないこと。たぶん、あとで絶対ハマる原因になると思う。

トラックバック

このエントリーのトラックバックURL:
http://www.ironhearts.com/diary/mt-tb-ih.cgi/271

コメント (2)

empty()は"==="演算子やstrlen()==0とかも使い分けないとですね。。。

ANN@管理人:

コメントありがとうございます。

>empty()は"==="演算子やstrlen()==0とかも使い分けないとですね。。。

うーん。ちょっとよくわからないです。
empty()は、booleanなので、===演算子を使う意味はあまりないと思います。
strposなんかは、数字とbooleanを返してくるので、===でチェックしないと、0を返してきた時にハマったりします。

やっぱり、"0"(ASCII値の48)を、「空」として返すempty()がマズいとおもうんですよね。僕ならunsetとか、strlenとか、単純に != ""とかでやると思います。


http://php.benscom.com/manual/ja/migration4.empty.php
にて、

数値の入力が要求された場合でも全てのinputフィールドは文字列を返し、 PHPは自動的に型変換を行う機能を有しているため、この動作の変更は、 Webアプリケーションにおいて有意義なものです。しかし、一方、コード の正常動作を阻害する可能性があり、動作の内容を知らない場合には、 原因を追求しがたい動作の不備を生じる可能性があります。

という記述がありました。なるほど。inputフィールドで数値入力の場合ですね・・でも、値のチェックを考えると、empty()ではなく、eregで値の正当性をチェックするのが妥当だと思いますね。

コメントを投稿

2008年10月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

最近のコメント

小優 on 日々の記録: DELL4600Cで
よしぞう on 日々の記録: 4600C 表記の対
よしぞう on 日々の記録: 4600C 表記の対
on MySQL後で調べるメモ: DB接続後 目的のS
on 日々の記録: 「無くなった留め具」
on JavaScriptでクロスドメイン: >しかし、こういう小
junp on iMovieで静止画を取り込むと荒い: すいません困ってます
う〜ん・・・ on 素朴な疑問: にょうをした、きたな
困ってました on ATOKとIME2005が勝手に切り替わる問題: 何故か勝手に切り替わ
go on 日々の記録: 4600C、同じ症状

アーカイブ