#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
проверка не требуется.