[PHP-users 5825] Re: PHP 4.0 / 4.1 の isset()の相違

Naofumi Kondoh php-users@php.gr.jp
Sun, 03 Mar 2002 18:48:08 +0900


ソフト工房の近藤です。

WADA Hiroyuki wrote:

..... 略 .....

> class testclass { var $dd = ""; }
> $test = new testclass();
> if (isset($test->dd[0])){
> 
> というのは、ddが配列であるつもりなのに""で初期化してるのが
> おかしいのだと思います。

スカラーか配列かの判定の話ですので、わざとスカラー
値をセットしてテストする例題にしています。

スレッドの流れが読みにくかったのかもしれませんが、
このスレッドの主旨は、プロパティーが配列なのか、
値がセットされているのか未定義なのかを判定する方法
についての話です。

つまり、$test->dd は、プログラムの分岐によってスカラー
になる場合と配列になる場合とがあり、それを判定する場合、
PHP 4.0 では、 isset($test->dd[0]) だけでも Warning が
出ないが、PHP 4.1 では、
   is_array($test->dd) && isset($test->dd[0]) 
と書かないと Warning が出ますというだけの話です。

# isset だけでに頼らず、細かくチェックしないといけな
# いという教訓でした。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon@shonan.ne.jp 
  《 PostgreSQL+PHPソースコードジェネレーターデモGPL版 》
           http://www.SOFTKOUBOU.co.jp/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/