php — проверить, является ли $ _POST массивом?

#php #arrays #global

#php #массивы #глобальный

Вопрос:

Я знаю, это может быть глупый вопрос, но я натыкаюсь на фрагмент php-кода, который проверяет, $_POST is_array() перед выполнением других функций.

Теперь я предполагаю, что $ _POST всегда должен быть ассоциативным массивом или нет? действительно ли нужна эта проверка? и почему?

Комментарии:

1. Не всегда. Лично я использую объектную оболочку вокруг $_POST, $_GET и Co. Они все еще работают как массив, но являются ArrayObjects и не прошли бы эту простую is_array() проверку. Но это ужасно особый случай. Обычно это не вызывает беспокойства.

Ответ №1:

Если он не был изменен каким-либо образом, например

 $_POST = 'not array';
  

тогда это массив 😉

Комментарии:

1. Точно. Если явно не указано иное, суперглобальный файл $_POST всегда является массивом.

2. хорошо, но это может быть изменено только программистом или оно может быть установлено в строку также отправителями формы? может ли это быть проблемой безопасности?

3. @Julie Rokk: если это не было изменено явно разработчиком , как я ответил — это всегда массив . Изменить его снаружи невозможно.

Ответ №2:

$ _POST всегда является массивом, вероятно, они проверяют, является ли определенное значение $ _POST массивом.

<input name="test" /> $_POST[‘test’] не является массивом

<input name="test[]" /> $_POST[‘test’] является массивом

Ответ №3:

  • $_POST является суперглобальным и всегда определен (всегда существует) и всегда является массивом
  • это верно, даже если он не содержит никаких элементов
  • однако, если это нежелательно и я никогда этого не видел, можно перезаписать или отменить его
  • вам не нужны isset() и is_array() для массива $_POST, но они довольно часто понадобятся для элементов в массиве $_POST

Комментарии:

1. спасибо за ваш ответ, я хочу проголосовать за ваш ответ, потому что он подробный, хотя я считаю нужным проверить ответ zerkms, потому что в нем сказано то, что я искал; я уже знал все остальные детали.

Ответ №4:

Эта проверка не нужна. $_POST — это суперглобальный массив, который всегда определен. Вы должны просто проверить наличие определенных элементов, используя isset

Ответ №5:

PHP гарантирует, что $_POST всегда является массивом, вам не нужно выполнять эту проверку, если только где-то в вашем коде вы каким-то образом не отмените или не перезапишете $_POST.

Ответ №6:

Это всегда массив, как многие уже говорили.

Я думаю, что намерение, возможно, состоит в том, чтобы проверить наличие пустого массива. !пустой ($ _POST) должен работать просто отлично.

Возможно, у программиста есть разделы, где массив изменен на строку (глупо, если вы спросите меня), и он хочет выполнить проверку, иначе, если это утверждение идет первым, тогда оно не нужно

Ответ №7:

$_POST всегда определяется как массив, даже если он не содержит никаких пар ключ / значение.

Ответ №8:

Как уже упоминалось несколько раз, $_POST это суперглобальный объект, который всегда определен и всегда является массивом (если не перезаписан).

Если вы пытаетесь проверить, было ли что-то опубликовано, вы могли бы использовать что-то вроде следующего:

 if (count($_POST)) {
    // something has been submitted
}
  

Чтобы ответить на главный вопрос, нет, is_array проверка не требуется.