Что лучше, иссет или нет?

есть ли разница в скорости между

if (isset($_POST['var']))

или

if ($_POST['var'])

и что лучше или они одинаковые?

5 ответов


Это хорошая практика, чтобы использовать isset по следующим причинам:

  • если $_POST['var'] - пустая строка или "0", isset все равно обнаружит, что переменная существует.
  • Не использование isset создаст уведомление.

они не то же самое. Рассмотрим условный массив:

$arr = array(
  'a' => false,
  'b' => 0,
  'c' => '',
  'd' => array(),
  'e' => null,
  'f' => 0.0,
);

предполагая, что $x является одним из этих ключей ("a" до "f"), а ключ "g", которого там нет, работает следующим образом:

  • $arr[$x] и false для всех ключей от a до g;
  • isset($arr[$x]) is true для ключей a, b, c, d и f, но false для e и g; и
  • array_key_exists($x, $arr) is true для всех ключей от a до f,false на гр.

Я предлагаю вам посмотреть тип PHP жонглирование, в частности преобразование в логические значения.

наконец, то, что вы делаете, называется микро-оптимизации. Никогда не выбирайте, какой из них воспринимается быстрее. То, что быстрее, настолько незначительно по разнице, что должно никогда быть фактором, даже если вы могли бы надежно определить, что быстрее (что я не уверен, что вы могли бы на любом статистически значимом уровне).


isset проверяет, что переменная имеет любое значение, в то время как if проверяет значение переменной.

например:

// $_POST['var'] == 'false' (the string false)
if (isset($_POST['var'])) {
    // Will enter this if
}
if ($_POST['var']) {
    // Won't enter this one
}

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


в строгом PHP вам нужно проверить, установлена ли переменная перед ее использованием.

error_reporting(E_ALL | E_STRICT);

что вы здесь делаете

if ($var)

не проверяет, установлено ли значение. Таким образом, строгий PHP будет генерировать уведомление для unset переменных. (это часто происходит с массивами)

также в строгом PHP (просто FYI для вас или других) использование unset var в качестве аргумента в функции вызовет уведомление, и вы не можете проверить isset () в функции, чтобы избежать что.


просто повторяя то, что сказали другие, если вы выполните:

if($variable)

и $переменная не set, вы получите сообщение об ошибке. Плюс..

$var = 0;
if($variable) {
    //This code will never run, because $var is false
}

но использование isset вернет true в этом случае.