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

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

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

или

 if ($_POST['var']) 

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

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

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

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

 $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.

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

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

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); 

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

если ($ Var)

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

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

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

 if($variable) 

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

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

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