размер массива> 0, хотя ключ не установлен - PullRequest
1 голос
/ 23 сентября 2011

короткий вопрос.

с учетом следующего примера:

$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)

почему результирующий массив имеет размер 1вместо 0 и есть ли способ предотвратить это при использовании троичного оператора?Это ошибка или предполагаемое поведение?

Кстати, я использую php 5.3.3-7, но в настоящее время не могу проверить его на другой версии.

1 Ответ

2 голосов
/ 23 сентября 2011

isset() возвращает значение false, если переменная не установлена, или переменная равна NULL.В этом случае $arr[0] явно установлено на NULL.Это семантически отличается от фактического unset() этого: переменная все еще установлена, она просто установлена ​​в пустое значение.

Короче говоря: работа по назначению.Это неприятный побочный эффект от того, что разные функции делают несколько разные вещи.

В качестве sidenote, использование foreach в этом массиве на самом деле также вернет пару 0 => NULL ключ / значение, как вы можете ожидать отзначение, возвращаемое count().

...