[PHP-users 5822] Re: PHP 4.0 / 4.1 の isset()の相違
WADA Hiroyuki
php-users@php.gr.jp
Sun, 03 Mar 2002 15:48:11 +0900
Naofumi Kondoh wrote:
> > > arr['foo'] is bar
> > > arr['foo']['bar'] is b
> >
> > ゴミでなくて、arr['foo']が文字列'bar'だから先頭の1文字を返してる
> > ように見えますが。文字列への配列アクセスがまだ生きてるんでは?
>
> 細いことですが、 $arr['foo']['bar'] という要素は
> 定義されていないので、どのような文字であれ、文字
> を指すこと自体が間違いです。
「要素は定義されていない」というより$arr['foo']が文字列であれば
そもそも要素を持てないのではないでしょうか?PHPの文字列はJavaや
JavascriptのオブジェクトなStringとは違いますよね?
文字列に対して[]を適用すると文字列中のキャラクタ参照になって、
[]の中は数値コンテクストで評価されるので文字列=0で1文字目を
返す、というのは自然な感じですが。
C:\php-4.1.0-Win32-mb>php
<?
$a="1234";
$a['b']="3";
echo $a;
?>
X-Powered-By: PHP/4.1.0
Content-type: text/html
3234
てな具合です。
(文字列中のキャラクタ参照は[]でなく{}を使うように推奨されてるので、
「まだ生きてる」という表現をしました。)
isset()の引数に渡された場合にどうなるべきかについては特に
意見はありません。値が参照可能だったのでtrueになってるんで
しょうね。
最初に戻って、
class testclass { var $dd = ""; }
$test = new testclass();
if (isset($test->dd[0])){
というのは、ddが配列であるつもりなのに""で初期化してるのが
おかしいのだと思います。
array()にするとwarningがでません。
和田@修行中