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

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

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

или

if ($_POST['var'])

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

Ответ 1

Рекомендуется использовать isset по следующим причинам:

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

Ответ 2

Они не совпадают. Рассмотрим условный массив:

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

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

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

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

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

Ответ 3

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

Например:

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

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

Ответ 4

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

error_reporting(E_ALL | E_STRICT);

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

если ($ Var)

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

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

Ответ 5

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

if($variable)

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

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

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