Есть ли разница в скорости между
if (isset($_POST['var']))
или
if ($_POST['var'])
И что лучше или они одинаковы?
Рекомендуется использовать isset
по следующим причинам:
$_POST['var']
– пустая строка или "0"
, 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.