Де я буду використовувати isset () та! Empty ()


106

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

Тож ви можете empty()перевірити, чи користувач щось набрав.

  1. Чи правда, що isset()функція розглядає порожній рядок як TRUE?

  2. Тоді в яких ситуаціях я повинен використовувати isset()? Чи слід завжди використовувати, !empty()щоб перевірити, чи є щось?

Наприклад замість

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

Використовуючи це

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

Відповіді:


136

isset vs.! порожній

ЗВТ:

"isset () перевіряє, чи має змінна значення, що включає (False, 0 або порожній рядок), але не NULL. Повертає TRUE, якщо існує var; FALSE в іншому випадку.

З іншого боку, функція empty () перевіряє, чи має змінна порожнє значення порожній рядок, 0, NULL або False. Повертає FALSE, якщо значення var має порожнє та ненулеве значення. "


47
FTA: Зі статті
Цзянсін Гао

5
empty()також повертає true для порожнього масиву.
Мітя

Навіть тому, що empty()повертає TRUE за 0, це не гарна ідея використовувати цей оператор для математики у випадку, якщо "0" випадково є рядком. Це може бути небезпечно. Замість цього слід використовувати основний >, <а ==оператори і перетворення змінних з використанням intval()або floatval().
kaleazy

33

Найбільш загальним способом:

  • issetперевіряє , є чи змінна (або елемент масиву або властивість об'єкта) існує (і не дорівнює нулю)
  • empty перевіряє, чи змінна (...) містить деякі непорожні дані.


Щоб відповісти на питання 1 :

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

дає

boolean true

Тому що змінна $strіснує.


І питання 2 :

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

Тепер, щоб працювати над її цінністю, коли ви знаєте, що існує така цінність: це робота empty.


11

Це не є гарним способом перевірити правильність введення даних.

  • isset() недостатньо, оскільки - як уже зазначалося - він вважає порожню рядок дійсним значенням.
  • ! empty() також недостатня, оскільки вона відхиляє "0", що може бути дійсним значенням.

Використання в isset()поєднанні з перевірки рівності порожнього рядка - це мінімальний мінімум, який потрібно перевірити, чи має параметр, що входить, не створюючи помилкових негативів:

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

Але під «голим мінімумом» я маю на увазі саме це. Все вищевказаний код визначає, чи є якесь значення $_GET['gender']. Вона НЕ визначає , є чи значення для $_GET['gender']є дійсним (наприклад, один з ).("Male", "Female","FileNotFound")

Для цього дивіться відповідь Джоша Девіса .


Оскільки ви використовуєте нестабільне порівняння, запропонований фрагмент дасть помилкові позитиви при обробці нестрокового значення zero-ish / falsey. 3v4l.org/aIWqA
mickmackusa

11

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

Отже, ваше перше питання має бути скоріше, якщо issetповертається true для змінної, що містить порожню рядок. І відповідь така:

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

У таблицях порівняння типів в керівництві РНР дуже зручно для таких питань.

issetв основному перевіряє, чи має змінна інше значення, крім null, оскільки неіснуючі змінні завжди мають значення null . emptyє різновидом лічильника, issetале також вважає ціле значення 0та значення рядка "0"порожніми. (Знову подивіться таблиці порівняння типів .)


1
Зауважте, що empty()також "підтримує вирази, а не лише змінні", як це стосується PHP 5.5.0.
ComFreek

8

Якщо у вас є $ _POST ['param'] і припустимо, що це тип рядка

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

тотожне

!empty($_POST['param'])

4

isset () не є ефективним способом перевірки введення тексту та текстових полів із форми HTML

Ви можете переписати, що "isset () - це не спосіб перевірити дані". Для перевірки введення даних використовуйте розширення фільтра PHP . filter_has_var()підкаже, чи існує змінна, хоча filter_input()насправді буде фільтрувати та / або санітувати вхід.

Зауважте, що вам не доведеться використовувати filter_has_var()до, filter_input()і якщо ви попросите змінну, яка не встановлена, filter_input()вона просто повернеться null.


3

Коли і як користуватися:

  1. isset ()

Істинно для 0, 1, порожній рядок, рядок, що містить значення, true, false

Неправильно для нуля

напр

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. Порожній

Хибне для 1, рядок, що містить значення, true

Вірно для null, порожній рядок, 0, false напр

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

2

isset використовується для визначення, чи існує екземпляр чогось, тобто, якщо змінна була інстанційною ... вона не стосується значення параметра ...

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

empty () не генерує попередження, якщо змінна не існує ... тому перевагу isset () є переважним при тестуванні на існування змінної, коли ви маєте намір змінити її ...


1

Використання emptyдостатньо:

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

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


2
Крім того, intval () ніколи не повертає FALSE.
Джош Девіс

1
його НЕ достатньо, оскільки '0' є дійсним рядком, але не для empty... isset/, filter_has_varщоб перевірити, чи існує var.
Yousha Aleayoub

1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

1

Я прийшов сюди, шукаючи швидкий спосіб перевірити, чи є змінна в ній вмістом. Жодна з відповідей тут не дала повного рішення, тож ось це:


Досить перевірити, чи є вхід ''чи null, тому що:

Запросити .../test.php?var=результати URL-адреси в$_GET['var'] = ''

Запросити .../test.phpрезультати URL-адреси в$_GET['var'] = null


isset()повертається falseлише тоді, коли змінна існує та не встановлена null, тому якщо ви її використовуєте, ви отримаєте trueпорожні рядки ( '').

empty()вважає і обом, nullі ''порожнім, але він також вважає '0'порожнім, що є проблемою в деяких випадках використання.

Якщо ви хочете ставитися '0'як до порожнього, тоді використовуйте empty(). В іншому випадку використовуйте таку перевірку:

$var .'' !== ''оцінює falseлише для таких входів:

  • ''
  • null
  • false

Я використовую наступну перевірку, щоб також фільтрувати рядки з лише пробілів та розривів рядків:

function hasContent($var){
    return trim($var .'') !== '';
}

0

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

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

"Оператор stfu" ( @) не слід заохочувати, і це не потрібно для вашого фрагмента. Це не є гарною відповіддю. Ви робите слабке порівняння. Ви також можете використовувати !empty().
mickmackusa

1
Ooo man ... Це чудово підходить для поганого прикладу кодування. @у вас виникнуть проблеми з налагодженням, вплив сторінки повільніше, і ви все одно можете мати error_logбільше 1 Гб за одну мить. Просто будьте розумні і використовуйте !empty(), !is_null()або щось подібне.
Ivijan Stefan Stefan Stipić

0

isset () використовується для перевірки того, чи вказана змінна зі значенням чи ні, і Empty () використовується для перевірки, чи дана змінна порожня чи ні.

isset () повертає true, коли змінна не є нульовою, тоді як Empty () повертає true, якщо змінна порожня рядок.


0
    $var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
 echo '$var is set even though it is empty';
    }

Джерело: Php.net


0

isset () тестує, якщо змінна встановлена, а не null:

http://us.php.net/manual/en/function.isset.php

empty () може повернути true, коли змінна встановлена ​​на певні значення:

http://us.php.net/manual/en/function.empty.php

<?php

$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>


0

! порожній зробить трюк. якщо вам потрібно лише перевірити, чи є дані чи немає, тоді використовувати isset, інші порожні можуть обробляти інші перевірки

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.