Что лучше, исеть или нет? - PullRequest
6 голосов
/ 10 мая 2009

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

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

или

if ($_POST['var'])

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

Ответы [ 5 ]

17 голосов
/ 10 мая 2009

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

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

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

$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]) - это true для клавиш a, b, c, d и f, но false для e и g; и
  • array_key_exists($x, $arr) - это true для всех клавиш от a до f, false для г.

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

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

4 голосов
/ 10 мая 2009

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

Например:

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

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

1 голос
/ 10 мая 2009

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

error_reporting(E_ALL | E_STRICT);

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

если ($ Var)

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

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

0 голосов
/ 10 мая 2009

Просто повторяйте то, что говорили другие, если вы выполняете:

if($variable)

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

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

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

...