1

次のコード行が true と出力される理由を誰か説明してもらえますか?

$a = "string";

if(isset($a['error'])) echo true; else echo false;

関数呼び出しを実行すると、正常に機能した場合は期待されるデータが返されarray("error" => $error)ます。

次に、返されたデータを受信すると、 isset($var['error']) かどうかを確認し、そうでない場合は、期待されるデータを受信したことがわかります。

また、これが関数呼び出し間のデータ処理の良い方法か悪い方法かを教えていただければ幸いです。そして、これに対するより良い「良い習慣」があれば。

4

3 に答える 3

3

これはPHPの誤動作の一部であり、幸いなことに最近のバージョンで修正されています。

配列要素のアドレス指定に使用されるのと同じ角括弧を使用して、文字列内の1文字をアドレス指定できます。

'error'0と評価され、$a[0]設定されたものが得られます。

$aが最初に配列であるかどうかを確認する必要があることを修正するには

于 2013-01-19T12:41:57.930 に答える
0

これはバグであり、PHP 5.4以降で修正されていると思います: http://codepad.viper-7.com/fz1rnT

isset($str[$key])と同じように見えますisset($str[intval($key)])。ここで$str$keyは文字列です

エラーを処理するための最善のアプローチは例外です。

于 2013-01-19T12:41:56.657 に答える
0

なぜこのような動作になるのか100%はわかりませんが、PHPでは配列と同じように文字列を処理できることは知っています。

$a = "StackOverflow";

echo $a[2]; // a
echo $a[4]; // k
echo $a[6]; // v
echo $a[8]; // r

これで、配列のインデックスとして文字列キーを渡すと、PHPはその文字列を数値に解析してキーとして使用しようとします。

echo $a['stack']; // S
echo $a['over']; // S
echo $a['flow']; // S

echo $a['0stack']; // S
echo $a['1over']; // t
echo $a['2flow']; // a
echo $a['3flow']; // c
echo $a['4flow']; // k
于 2013-01-19T12:42:40.847 に答える