Чи є різниця між issetі !empty. Якщо я роблю цю подвійну булеву перевірку, чи правильно це так чи зайве? і чи існує коротший спосіб зробити те саме?
isset($vars[1]) AND !empty($vars[1])
Чи є різниця між issetі !empty. Якщо я роблю цю подвійну булеву перевірку, чи правильно це так чи зайве? і чи існує коротший спосіб зробити те саме?
isset($vars[1]) AND !empty($vars[1])
Відповіді:
Це абсолютно зайве. emptyє більш-менш скороченим !isset($foo) || !$fooі !emptyє аналогом isset($foo) && $foo. Тобто emptyробиться зворотна річ issetплюс додаткова перевірка правдивості значення.
Або іншими словами, emptyце те саме !$foo, але не кидає попередження, якщо змінна не існує. Це головний момент цієї функції: виконайте булеве порівняння, не переживаючи про встановлення змінної.
Посібник розміщує його так:
empty()є протилежним(boolean) var, за винятком того, що попередження не створюється, коли змінна не встановлена.
Ви можете просто використовувати !empty($vars[1])тут.
$vars[1]він отримає повідомлення.
empty- одна з найбільш неправильно зрозумілих функцій PHP. Крихітний фрагмент про те, що "не створюється попередження" дуже просто не помітити. Мені довелося кілька разів сканувати документацію, щоб помітити її, щоб розмістити її тут.
empty($vars[1])не викликає жодних попереджень, навіть $vars[1]не встановлено, але echo $vars[1]буде. Я перевірив факт, використовуючи echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
0такою false. PHP - не єдиний. Досі не впевнений, яка у вас скарга.
isset() тести, якщо змінна встановлена, а не нуль:
http://us.php.net/manual/en/function.isset.php
empty() може повернути true, коли змінна встановлена на певні значення:
http://us.php.net/manual/en/function.empty.php
Щоб продемонструвати це, спробуйте наступний код з непризначеним $ the_var, встановленим на 0, і встановіть значення 1.
<?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";
}
?>
Прийнята відповідь не вірна.
isset () НЕ еквівалентно! empty ().
Ви створите кілька досить неприємних і важких для відладки помилок, якщо підете по цьому маршруту. наприклад, спробуйте запустити цей код:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
issetце рівнозначно !empty.
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
echo '$a is not empty';
} else {
echo '$a is empty';
}
Порожня просто перевірка - це згадана змінна / масив має значення, якщо ви перевіряєте php doc (порожній), ви побачите, що це вважається порожнім
* "" (an empty string) * 0 (0 as an integer) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
у той час як isset перевірити, чи є змінна isset, а не null, що також можна знайти в php doc (isset)
Це не обов'язково.
Якщо змінна не існує, попередження не створюється. Це означає, що порожній () по суті є лаконічним еквівалентом! Isset ($ var) || $ var == false.
isset($vars[1]) AND !empty($vars[1])еквівалентно !empty($vars[1]).
Я підготував простий код, щоб показати його емпірично.
Останній рядок - невизначена змінна.
+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| '' | true | true | false | false |
| ' ' | false | true | true | true |
| false | true | true | false | false |
| true | false | true | true | true |
| array () | true | true | false | false |
| NULL | true | false | false | false |
| '0' | true | true | false | false |
| 0 | true | true | false | false |
| 0.0 | true | true | false | false |
| undefined | true | false | false | false |
+-----------+---------+---------+----------+---------------------+
І код
$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;
function compare($var)
{
print(var_export($var, true) . "|" .
var_export(empty($var), true) . "|" .
var_export(isset($var), true) . "|" .
var_export(!empty($var), true) . "|" .
var_export(isset($var) && !empty($var), true) . "\n");
}
for ($i = 1; $i <= 9; $i++) {
$var = 'var' . $i;
compare($$var);
}
@print(var_export($var10, true) . "|" .
var_export(empty($var10), true) . "|" .
var_export(isset($var10), true) . "|" .
var_export(!empty($var10), true) . "|" .
var_export(isset($var10) && !empty($var10), true) . "\n");
Невизначена змінна повинна бути оцінена зовнішньою функцією, оскільки сама функція створює тимчасову змінну в межах самої області.
"Порожня": працює лише на змінних. Порожня може означати різні речі для різних типів змінних (перевірити посібник: http://php.net/manual/en/function.empty.php ).
"isset": перевіряє наявність змінної та перевіряє справжнє NULL або хибне значення. Відключити можна за допомогою виклику "unset". Ще раз перевірте інструкцію.
Використання будь-якого з них залежить від типу змінної, яку ви використовуєте.
Я б сказав, що безпечніше перевірити обидва, адже ви перевіряєте насамперед, чи існує змінна, і чи вона насправді НУЛЬНА чи порожня.
якщо ми використовуємо ту саму сторінку для додавання / редагування за допомогою кнопки подання, як показано нижче
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
тоді ми не повинні користуватися
isset($_POST['edit_id'])
bcoz edit_idвстановлюється весь час, будь то додавання чи редагування сторінки, замість цього ми повинні використовувати прапорець нижче
!empty($_POST['edit_id'])
empty()функцію:Повертається, FALSEякщоvar має значення не порожнє та ненулеве значення.
Це добре знати. Іншими словами, все , від NULL, до 0до «» повернеться TRUEпри використанні empty()функції.
isset()функція повертає:Повертається, TRUEякщо varіснує;FALSEінакше.
Іншими словами, тільки змінні , які не існують (або, змінних зі строго NULLзначеннями) буде повертати FALSEна isset()функції. Повертаються всі змінні, які мають будь-який тип значення, будь то 0пустий текстовий рядок тощо TRUE.