1

短い質問。

次の例を考えます。

$arr = array();
$arr[0] = false ?: NULL;
var_dump($arr[0]);
var_dump($arr[1]);
var_dump(isset($arr[0]));
var_dump(isset($arr[1]));
var_dump(count($arr));

結果の出力は次のとおりです。

NULL 
NULL 
bool(false) 
bool(false) 
int(1)

結果の配列のサイズが 0 ではなく 1 になるのはなぜですか。また、三項演算子を使用するときにこれが起こらないようにする方法はありますか? それはバグですか、それとも意図した動作ですか?

ところで、私は php 5.3.3-7 を実行していますが、現時点では別のバージョンでテストできません。

4

1 に答える 1

2

isset()変数が設定されていない場合、または変数がに等しい 場合はfalseを返しますNULL。この場合、$arr[0]は明示的にに設定されNULLます。これは、実際に実行するのとは意味的に異なりunset()ます。変数はまだ設定されており、空の値に設定されているだけです。

つまり、意図したとおりに機能します。これは、わずかに異なることを行うさまざまな機能の不幸な副作用です。

補足として、foreachこの配列でを使用すると、によって返される値から予想されるように、実際には0 => NULLキーと値のペアも返されcount()ます。

于 2011-09-23T10:07:49.357 に答える