isset () не имеет ничего общего с TYPE или VALUE - только с EXISTENCE.
if ($ condition) ... оценит VALUE of VARIABLE как логическое значение.
if (isset ($ condition)) ... оценит СУЩЕСТВОВАНИЕ ПЕРЕМЕННОГО ЗНАЧЕНИЯ как логическое значение.
isset () может быть ложным по двум причинам.
Во-первых, потому что переменная не установлена и поэтому не имеет значения.
Во-вторых, потому что переменная имеет значение NULL, что означает «неизвестное значение» и не может считаться установленным, потому что оно включает в себя «нет значения» и потому, что многие люди используют $ v = null для обозначения того же, что и unset ($ v).
(Помните, если вы специально хотите проверять на ноль, используйте is_null ().)
isset () обычно используется для проверки внешней переменной, которая может существовать или не существовать.
Например, если у вас есть страница с именем page.php, которая имеет это:
ini_set('display_errors', 1);
error_reporting(E_ALL);
if ( $_GET["val"] ) {
// Do Something
} else {
// Do Nothing
}
это будет работать нормально для любого из этих URL:
http://www.example.com/page.php?val=true // Something will be done.
http://www.example.com/page.php?val=monkey // Something will be done.
http://www.example.com/page.php?val=false // Nothing will be done.
http://www.example.com/page.php?val=0// Nothing will be done.
Однако вы получите сообщение об ошибке для этого URL:
http://www.example.com/page.php
, поскольку в URL нет аргумента 'val', поэтому в массиве $ _GET нет индекса 'val'.
Правильный способ сделать это так:
if ( isset($_GET["val"]) ) {
if ( $_GET["val"] ) {
// Do Something
} else {
// Do Nothing
}
} else {
// $_GET["value"] variable doesn't exist. It is neither true, nor false, nor null (unknown value), but would cause an error if evaluated as boolean.
}
Хотя для этого есть ярлыки.
Вы можете проверить комбинацию существования и определенных логических условий с помощью empty (),
if ( !empty($_GET["val"]) ) {
// Do someting if the val is both set and not empty
// See http://php.net/empty for details on what is considered empty
// Note that null is considered empty.
}
или
if ( isset($_GET["val"]) and $_GET["val"] ) {
// Do something if $_GET is set and evaluates to true.
// See php.net logical operators page for precedence details,
// but the second conditional will never be checked (and therefor
// cause no error) if the isset returns false.
}