Есть ли разница в скорости между
if (isset($_POST['var']))
или
if ($_POST['var'])
И что лучше или они одинаковы?
Есть ли разница в скорости между
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.Я предлагаю вам взглянуть на juggling типа 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);
Что вы здесь делаете
если ($ Var)
Не проверяется, установлено ли значение. Таким образом, строгий PHP будет генерировать уведомление о неустановленных переменных. (это часто случается с массивами)
Также в строгом PHP (просто FYI для вас или других) использование unset var в качестве аргумента в функции вызовет уведомление, и вы не можете проверить isset() внутри функции, чтобы этого избежать.
Просто повторить то, что сказали другие, если вы выполните:
if($variable)
и переменная $ not, вы получите сообщение об ошибке. Плюс..
$var = 0;
if($variable) {
//This code will never run, because $var is false
}
но использование isset в этом случае вернет true.