2

すべてのエラー報告をオンにして、いくつかの未定義のインデックスをクリーンアップしました。これは、作成中のアプリをよりきちんとしたものにするためです。奇妙な動作に気付きました:

次の配列があるとします。$a = array('test' => false, 'foo' => 'bar')

そうすればif ($a['nothere'])ちゃんと通知が来ますUndefined index: nothere

しかし、そうするとif ($a['test']['nothere'])、通知が届きません。まったく。のインデックスnothereではないことは間違いありませんが$a['test']

今、私がそうする$a['test'] = array('baz' => 'poof')と、実行すると通知if ($a['test']['nothere']) スローされます。

未定義のインデックス チェックでは、空の配列のインデックスはチェックされませんか? これは PHP 5.2.8 上にあります。

4

1 に答える 1

5

トリッキーなタイプのジャグリングが原因です。$ a ['test']が[空の]文字列にキャストされ、次に'nowhere'が0にキャストされると、PHPは空の文字列で0の記号を検索しようとします。変数ルックアップではなくサブストリング操作になるため、エラーは発生しません。

ジー、男は同じことを言います:http: //php.net/manual/en/language.types.type-juggling.php

私の経験からの奇妙な例:
ハイパーリンクindex.php?sname=p_edit&page=0、コードを介して要求されている

if (isset($_GET['sname'])) { $page['current'] = $_GET['sname'].'.php'; };
echo $page['current'];

1文字だけを生成します"p"

6歩と2型キャストを数えた結果、このような結果になりました。
(ヒント:この質問をした貧しい人は、グローバル登録をしていました)

于 2011-02-07T16:11:18.040 に答える