その1。
「FlashのduplicateMovieClip()にてはまる」
Flash MX 2004にて。
MovieClipLoader(LoadMovie)にてロードしたJPG画像は、複製できない。
一日くらい悩んだ。ロードしたのがswfなら複製できるらしい。
したがって、
動的にロードしたJPEGのMovieClipは複製できない。けっこう致命的のような・・。複製できないから、結局、同じ画像を別なMCにまたロードすることにした。すごい無駄な気がする。内部でキャッシュされてればいいけど。
Flashって、関数がエラー返してくれないから、どの時点で動いてないのかわからん・・デバッガの使い方もよくわからん〜だれかレクチャーして!
その2。
「PHP のemptyにハマる」
PHPにempty()という関数がある。引数の変数が定義されてるかどうかをtrue/falseで返す。
以下サンプル。
var_dump(empty($str));
----結果----
bool(false)
これだけ見ると、とくに問題ないように見える。$iは、空じゃないよ。と返してるので。
しかし、次のよく見て。
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を使わないこと。たぶん、あとで絶対ハマる原因になると思う。
コメント (2)
empty()は"==="演算子やstrlen()==0とかも使い分けないとですね。。。
投稿者: ZEROBASE | 2005年07月30日 00:53
日時: 2005年07月30日 00:53
コメントありがとうございます。
>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で値の正当性をチェックするのが妥当だと思いますね。
投稿者: ANN@管理人 | 2005年07月30日 14:37
日時: 2005年07月30日 14:37