Почему функция empty, кажется, очищает результат?

У меня странный результат в PHP.

if( $mandatory_param === "name" ){
    var_dump( $data );
    exit();
}

//output : array(6) { ["name"]=> string(4) "plan" ["class"]=> string(33) "Path\Plan" ["dbtable"]=> string(5) "plans" ["getter"]=> string(7) "plan_id" ["editable"]=> string(4) "true" ["slug"]=> string(2) "pl" } 

Но когда я пытаюсь empty Функция для проверки массива, результат изменяется, даже если первый вывод показывает это: ["name"]=> string(4) "plan"

if( $mandatory_param === "name" && empty( $data[ $mandatory_param ] ) ){
  var_dump( $data );
  exit();
}

//Output : array(0) { }

Зачем? empty() Кажется, функция очищает мой массив, чтобы не проверять, пустой ли он.

1 ответ

Решение

Без полного кода невозможно сказать наверняка, но сделать обоснованное предположение:

Когда у вас нет empty() проверить exit() срабатывает при первом вызове фрагмента кода / функции, и $data установлено.

Когда вы добавляете emptyпредыдущий вызов, который закончился внутри оператора if, больше не делает этого (так как name устанавливается для этого массива) и, следовательно, не производит никакого вывода или вызова exit(поэтому код продолжает работать).

Затем код выполняется до тех пор, пока тест не будет выполнен с массивом, который не имеет $data['name'] установить, выполняет var_dump (на том, что сейчас является пустым массивом) и выходит.

Ваш вызов empty ничего не удаляет, вы просто сбрасываете другой набор данных позже при запуске приложения.

Другие вопросы по тегам