Есть ли разница в скорости между
if (isset($_POST['var']))
or
if ($_POST['var'])
И что лучше или они одинаковые?
Есть ли разница в скорости между
if (isset($_POST['var']))
or
if ($_POST['var'])
И что лучше или они одинаковые?
Рекомендуется использовать isset
по следующим причинам:
$_POST['var']
является пустой строкой или "0"
, isset
все равно обнаружит, что переменная существует.Они не одинаковы. Рассмотрим условный массив:
$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
для g.Я предлагаю вам взглянуть на жонглирование типами в 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
}
Большая проблема заключается в том, что эквивалентность двух выражений зависит от значения проверяемой переменной, поэтому вы не можете делать предположения.
$a = ''; isset($a);
будет оценена как истина.
- person Fernando Silva; 24.07.2014
В строгом PHP вам нужно проверить, установлена ли переменная перед ее использованием.
error_reporting(E_ALL | E_STRICT);
Что ты здесь делаешь
если($вар)
Не проверяет, установлено ли значение. Таким образом, Strict PHP будет генерировать уведомление о неустановленных переменных. (это часто случается с массивами)
Также в строгом PHP (просто к сведению для вас или других) использование unset var в качестве аргумента в функции вызовет уведомление, и вы не можете проверить isset() внутри функции, чтобы избежать этого.
Просто повторяя то, что сказали другие, если вы выполните:
if($variable)
и $variable не установлена, вы получите уведомление об ошибке. плюс..
$var = 0;
if($variable) {
//This code will never run, because $var is false
}
но использование isset в этом случае вернет true.