Что лучше, иссет или нет?
есть ли разница в скорости между
if (isset($_POST['var']))
или
if ($_POST['var'])
и что лучше или они одинаковые?
5 ответов
Это хорошая практика, чтобы использовать isset
по следующим причинам:
- если
$_POST['var']
- пустая строка или"0"
,isset
все равно обнаружит, что переменная существует. - Не использование 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])
istrue
для ключей a, b, c, d и f, ноfalse
для e и g; и -
array_key_exists($x, $arr)
istrue
для всех ключей от a до f,false
на гр.
Я предлагаю вам посмотреть тип 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);
что вы здесь делаете
if ($var)
не проверяет, установлено ли значение. Таким образом, строгий PHP будет генерировать уведомление для unset переменных. (это часто происходит с массивами)
также в строгом PHP (просто FYI для вас или других) использование unset var в качестве аргумента в функции вызовет уведомление, и вы не можете проверить isset () в функции, чтобы избежать что.
просто повторяя то, что сказали другие, если вы выполните:
if($variable)
и $переменная не set, вы получите сообщение об ошибке. Плюс..
$var = 0;
if($variable) {
//This code will never run, because $var is false
}
но использование isset вернет true в этом случае.