Вопрос по php, if-statement – Разница между `if (isset ($ _ SESSION))` и `if ($ _SESSION)`?

4

Я заметил, что часто люди просто пишут

<code><?php  if($_SESSION['username']) {...} ?>
</code>

пока я использую:

<code> <?php if(isset($_SESSION['username'])) {...} ?> 
</code>

Может ли кто-нибудь объяснить разницу при проверке, установлена ли переменная (для чего я ее буду использовать)?

Помимо возможного уведомления об отладке, первое также проверяет логические значения содержимого, а не только присутствие. mario

Ваш Ответ

3   ответа
10

E_NOTICE ошибка, создайте отсутствующую переменную и назначьте ееNULL.

Если вы не хотите, чтобы ваши скрипты заполнялись надоедливыми сообщениями об ошибках, которые пропускают информацию о вашем сервере и скрипте - используйтеisset() проверить, прежде чем пытаться получить доступ к значению.

По сути, вы просите PHP получитьusername снаружи$_SESSION и PHP это как & quot;there is no username& Quot ;!

Я предполагаю, что автор приведенного выше кода (без isset ()) добавил переменную в _SESSION и "знает" (ха!), что это будет найдено позже.
Помимо тех,E_NOTICE ошибки полезны при разработке, поскольку они идентифицируют опечатки в именах переменных.
Спасибо! Поэтому использование if ($ var) было бы более полезным, если, скажем, вы хотите проверить, не является ли оно «0». или пустой? d-_-b
@DankPiff, в основном, если вы знаетеbeyond a shadow of a doubt, что переменная существует (потому что вы только что сделали это), то вы можете использовать ее напрямую, какif($var), Если вы не уверены, то вам нужно сначала проверить сif(isset($var)) или жеif(empty($var)) поэтому PHP знает, что пропущенные значенияok и вам не нужно неприятное сообщение об ошибке.
3

скажем, вы установили переменную = в ложь ...

$variable = false;

Это ничего не вернет, потому что оно проверяет, не является ли переменная нулевой, ложной или пустой ('' ') ...

if($variable){
    echo'something';
}

Это будет работать независимо от того, какую переменную мы установили, до тех пор, пока мы ее устанавливаем ... Это может быть false, str, int, что угодно, кроме null!

if(isset($variable)){
    echo'something';
}
Обычно я использую isset только для проверки, была ли передана переменная, например, для проверки, была ли отправлена форма ...
Поэтому использование if ($ variable) полезно, когда вы хотите проверить, является ли оно ложным или пустым, тогда как isset полезно, когда содержимое переменной может иметь значение «0». или даже установить пустым? d-_-b
6

Determine if a variable is set and is not NULL.

При написании:

<?php  if($_SESSION['username']) {...} ?>

Вы проверяете, равно ли значение $ _SESSION ['a user; имя пользователя'] true. Другими словами, вы проверяете, не равно ли значение ложному.

В соответствии сPHP.net следующие считаются ЛОЖНЫМИ:

When converting to boolean, the following values are considered FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags

Как видите, неустановленные переменные / переменные NULL считаются ЛОЖНЫМИ. Поэтому, проверяя, является ли элемент $ _SESSION истинным, вы также определяете, существует ли он.

Isset, с другой стороны, фактически проверяет, существует ли переменная. Если вы хотите знать, существует ли переменная SESSION с этим именем, используйте isset (), поскольку ее проверка на TRUE / FALSE не зависит от того, существует переменная или нет.

Далее рассмотрим следующие примеры:

$_SESSION['a'] = FALSE;
if($_SESSION['a']){
echo 'Hello'; //This line is NOT echo'd.
}

if(isset($_SESSION['b'])){
echo 'Hello'; //This line is NOT echo'd because $_SESSION['b'] has not been set.
}

Похожие вопросы