Intereting Posts
mysqli_fetch_array Дает мне повторяющиеся строки Получение списка имен друзей из MySQL Кто может взломать это регулярное выражение twitter? Не удается получить доступ к глобальной переменной внутри функции Издевательствование вызова с помощью цепочечных методов и аргументов PHP: включение страницы из глубоко вложенной иерархии каталогов – проблема с производительностью Как добавить (любой тип) значение в массив (по указанному индексу) на языке php Как обрабатывать исключение с помощью PhpExcel? Вызов функции-члена get () для не-объекта Форсировать композитор, чтобы требовать версию PHP между версией X и версией Y Получение адреса gmail с помощью … openid? OAuth? Являются ли глобальные переменные в PHP плохой практикой? Если да, то почему? Использование include () в ob_start () Изменение API графиков Google: тип изображения (размер) больше не работает? Добавить элементы в отношение Phalcon Many-to-Many

Где я должен использовать isset () и! Empty ()

Я где-то читал, что функция isset() состоит в том, что пустая строка проверяется как TRUE , поскольку isset() не является эффективным способом проверки текстовых входов и текстовых полей из HTML-формы.

Таким образом, вы можете использовать empty() чтобы проверить, что пользователь что-то набрал.

  1. Верно ли, что функция isset() обрабатывает пустую строку как TRUE ?

  2. Тогда в какой ситуации я должен использовать isset() ? Должен ли я всегда использовать !empty() чтобы проверить, есть ли что-то?

Например, вместо

 if(isset($_GET['gender']))... 

Используя это

 if(!empty($_GET['gender']))... 

Исеть против!

FTA:

«isset () проверяет, имеет ли переменная значение (False, 0 или пустую строку), но не NULL. Возвращает TRUE, если существует var, FALSE в противном случае.

С другой стороны, функция empty () проверяет, имеет ли пустая строка пустая строка, 0, NULL или False. Возвращает FALSE, если var имеет непустое и ненулевое значение. "

В наиболее общем виде:

  • isset тесты, если существует переменная (или элемент массива или свойство объекта) (и не является нулевым)
  • empty тесты, если переменная (…) содержит некоторые непустые данные.

Чтобы ответить на вопрос 1 :

 $str = ''; var_dump(isset($str)); 

дает

 boolean true 

Потому что переменная $str существует.

И вопрос 2 :

Вы должны использовать isset, чтобы определить, существует ли переменная; например, если вы получаете некоторые данные в виде массива, вам может потребоваться проверить, есть ли в этом массиве ключ isset.
Например, подумайте о $_GET / $_POST .

Теперь, чтобы работать над его значением, когда вы знаете, что существует такое значение: это задание empty .

isset предназначен для использования только для переменных, а не только значений, поэтому isset("foobar") вызовет ошибку. Начиная с PHP 5.5, empty поддерживает как переменные, так и выражения.

Поэтому ваш первый вопрос должен быть скорее, если isset возвращает true для переменной, которая содержит пустую строку. И ответ:

 $var = ""; var_dump(isset($var)); 

Таблицы сравнения типов в руководстве по PHP весьма удобны для таких вопросов.

isset основном проверяет, имеет ли переменная какое-либо значение, отличное от нуля, поскольку несуществующие переменные всегда имеют значение null . empty – это вид счетной части isset но также обрабатывает целочисленное значение 0 и строковое значение "0" как пустое. (Опять же, взгляните на таблицы сравнения типов .)

Также нет хорошего способа проверить правильность ввода.

  • isset() недостаточно, потому что, как уже отмечалось, он считает допустимым значение пустой строки.
  • ! empty() ! empty() недостаточно, потому что он отклоняет «0», что может быть допустимым значением.

Использование isset() сочетании с проверкой равенства с пустой строкой является минимальным минимумом, необходимо проверить, что входящий параметр имеет значение без создания ложных негативов:

 if( isset($_GET['gender']) and ($_GET['gender'] != '') ) { ... } 

Но «голый минимум», я имею в виду именно это. Весь приведенный выше код определяет, существует ли какое-то значение для $_GET['gender'] . Он не определяет, действительно ли значение для $_GET['gender'] (например, один из ("Male", "Female", "FileNotFound" ) ).

Для этого см . Ответ Джоша Дэвиса .

Использование empty достаточно:

 if(!empty($variable)){ // Do stuff } 

Кроме того, если вы хотите получить целочисленное значение, также стоит проверить, что intval($variable) !== FALSE .

isset () не является эффективным способом проверки текстовых входов и текстовых полей из HTML-формы

Вы можете переписать это как «isset () не способ проверки ввода». Чтобы проверить ввод, используйте расширение фильтра PHP. filter_has_var() сообщит вам, существует ли переменная, а filter_input() будет фактически фильтровать и / или дезинфицировать входные данные.

Обратите внимание, что вам не нужно использовать filter_has_var() до filter_input() и если вы попросите переменную, которая не установлена, filter_input() просто вернет null .

Если у вас есть $ _POST ['param'] и предположим, что это строковый тип, тогда

 isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0' 

идентична

 !empty($_POST['param']) 
 isset($variable) === (@$variable !== null) empty($variable) === (@$variable == false) 

isset используется, чтобы определить, существует ли экземпляр чего-либо, который есть, если была создана экземпляр переменной … это не касается значения параметра …

Паскаль МАРТИН … +1 …

empty () не генерирует предупреждение, если переменная не существует … поэтому isset () предпочтительнее при тестировании существования переменной, когда вы собираетесь ее модифицировать …

Когда и как использовать:

  1. Исеть ()

True для 0, 1, пустая строка, строка, содержащая значение, true, false

False для null

например

 $status = 0 if (isset($status)) // True $status = null if (isset($status)) // False 
  1. пустой

False для 1, строка, содержащая значение, true

True для нулевой, пустой строки, 0, false, например,

 $status = 0 if(empty($status)) // true $status = 1 if(empty($status)) // False 

Я использую следующее, чтобы избежать уведомлений, это проверяет, декларируется ли var в GET или POST, и с префиксом @ вы можете безопасно проверить, не является ли пустым, и избегать уведомления, если var не установлен:

 if( isset($_GET['var']) && @$_GET['var']!='' ){ //Is not empty, do something }