Простой PHP-тест isset - PullRequest
       14

Простой PHP-тест isset

26 голосов
/ 08 августа 2009

Это ниже, похоже, не работает так, как я ожидал, хотя $ _GET ['friendid'] = 55 возвращает NULL

<?PHP

$_GET['friendid'] = 55;

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

echo $friendid;
exit;

?>

Ответы [ 9 ]

57 голосов
/ 05 марта 2015

Начиная с версии PHP 7 , вы можете использовать оператор объединения нуля (двойной «?») Для этого:

$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";

В PHP 5.3+, если все, что вы проверяете, это значение " truey ", вы можете использовать "оператор Элвиса" (обратите внимание, что это не проверяет isset).

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
46 голосов
/ 08 августа 2009

Удалить !. Вы не хотите отрицать выражение.

$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
11 голосов
/ 06 февраля 2012

Если вы ленивый и рискованный, вы можете использовать оператор контроля ошибок @ и краткую форму троичный оператор .

$friendid = @$_GET['friendid']?: 'empty';
5 голосов
/ 08 августа 2009

В настоящее время вы работаете с троичным оператором:

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

Разбейте его на if-else выражение, и оно будет выглядеть так:

if(!isset($_GET['friendid']))
   $friendid = $_GET['friendid'];
else
   $friendid = 'empty';

Посмотрите, что на самом деле происходит в выражении if:

!isset($_GET['friendid'])

Обратите внимание на восклицательный знак (!) Перед функцией isset. Это еще один способ сказать "противоположность". Здесь вы проверяете, что в $_GET['friendid'] уже не задано значение. И если так, $friendid должен принять это значение.

Но на самом деле, он сломался бы, поскольку $_GET['friendid'] даже не существует. И вы не можете оценить ценность того, чего там нет.

С самого начала вы установили значение для $_GET['friendid'], так что первое условие if теперь ложно и передает его параметру else.

В этом случае установите значение переменной $friendid равным empty.

Вам нужно удалить восклицательный знак, и тогда значение $friendid примет значение $_GET['friendid'], если оно было установлено ранее.

2 голосов
/ 06 мая 2011

Лучшее решение для этого вопроса, т. Е. Если вам также необходимо «проверить пустую строку», это empty () .

$friendid = empty($_GET['friendid']) ? 'empty' : $_GET['friendid'];

empty () не только проверяет, установлена ​​ли переменная, но и дополнительно возвращает false, если ей передается все, что можно считать «пустым», например пустая строка, пустой массив, целое число 0 , логическое false, ...

1 голос
/ 08 августа 2009

Из вашего ответа Филиппу я думаю, что вам нужно взглянуть на различия между пустым и isset .

Подводя итог, isset() вернет логическое значение ИСТИНА, если переменная существует. Следовательно, если вы должны были сделать

$fid = $_GET['friendid'] = "";
$exists = isset($fid);

$exists будет ИСТИННО, так как $_GET['friendid'] существует. Если это не то, что вы хотите, я предлагаю вам заглянуть в пустоту. Empty вернет TRUE в пустой строке (""), что, по-видимому, соответствует ожиданиям. Если вы используете empty, , пожалуйста, обратитесь к документации, на которую я ссылался, есть другие случаи, когда empty вернет true, если вы этого не ожидаете, эти случаи явно задокументированы по вышеуказанной ссылке.

0 голосов
/ 26 октября 2017

Я использую Нулевой оператор объединения Оператор, если условие, подобное этому

if($myArr['user'] ?? false){

Что эквивалентно

if(isset($myArr['user']) && $myArr['user']){
0 голосов
/ 19 марта 2014

Хорошо, возможно, у меня возникла похожая проблема, не знакомая с! Ситуация, как у Джейсондависа.

Вид сбивает с толку, но обнаруживает, что не имеет! как в ... isset ($ avar) по сравнению с! isset ($ avar) может иметь значение.

Так и с! на месте, больше говорит ДА, как в

    since $_GET['friendid'] = 55; has been initialized...
                                tell me 'no' - the opposite - that it hasn't and set it to empty.
              $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

    where not having the ! tells me yes it has something in it, leave it be.

               $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

Было гораздо меньше путаницы с тем, если A $ = "" тогда .... работай. (или если $ A = "" для PHP).

Я считаю, что использование строк и переменных в качестве строк иногда очень утомительно. Даже из-за путаницы я могу понять, почему ... просто делает вещи немного сложными для понимания.

0 голосов
/ 08 августа 2009

, если friendid НЕ установлен, friendid = friendid, иначе friendid = empty

...