Простой тест PHP isset
-
12-09-2019 - |
Вопрос
Кажется, что это ниже не работает так, как я ожидал, несмотря на то, что $_GET['friendid'] = 55 он возвращает NULL
<?PHP
$_GET['friendid'] = 55;
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
echo $friendid;
exit;
?>
Решение
Удалить !
.Вы не хотите отрицать выражение.
$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
Другие советы
По состоянию на Выпуск PHP 7, вы можете использовать для этого оператор объединения нулей (двойной "?"):
$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";
В PHP 5.3+, если вы проверяете только "правдивый", вы можете использовать "оператор Элвиса" (обратите внимание, что это не проверяет isset).
$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
Если вы ленивы и рискуете, вы можете использовать оператор контроля ошибок @ и краткая форма тернарный оператор.
$friendid = @$_GET['friendid']?: 'empty';
В настоящее время вы работаете с тернарным оператором:
$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']
если он был установлен ранее.
Лучшее решение этого вопроса, т.е.если вам также нужно «проверить пустую строку», это пустой().
$friendid = empty($_GET['friendid']) ? 'empty' : $_GET['friendid'];
пустой() не только проверяет, установлена ли переменная, но дополнительно возвращает false, если ей передано что-либо, что можно считать «пустым», например пустая строка, пустой массив, целое число 0, логическое значение false, ...
Судя по вашему ответу Филиппу, я думаю, вам нужно взглянуть на различия между пустой и иссет.
Обобщить, isset()
вернет логическое значение TRUE, если переменная существует.Следовательно, если бы вы сделали
$fid = $_GET['friendid'] = "";
$exists = isset($fid);
$exists
будет ИСТИНА, поскольку $_GET['friendid']
существует.Если это не то, что вы хотите, я предлагаю вам поискать пустое.Empty вернет TRUE для пустой строки (""), чего вы и ожидаете.Если вы используете пустое, пожалуйста обратитесь к документации, на которую я ссылаюсь, есть и другие случаи, когда пустое значение возвращает true, чего вы не ожидаете, эти случаи явно задокументированы по ссылке выше.
если идентификатор друга НЕТ set, FriendID = FriendID, иначе FriendID = пусто
Хорошо, возможно, у меня возникла аналогичная проблема, поскольку я не был знаком с !ситуация, как у Джейсондэвиса.
Немного запутанно, но выяснилось, что у вас нет !как в...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';
Гораздо меньше путаницы было с if A$="" then....работай над этим.(или если $A="" для PHP).
Я нахожу такое использование строк и переменных как строк временами очень устрашающим.Даже несмотря на замешательство, я могу понять, почему...просто делает вещи немного трудными для понимания.
Я использую Нулевой оператор объединения оператор в условии if, подобном этому
if($myArr['user'] ?? false){
Что эквивалентно
if(isset($myArr['user']) && $myArr['user']){