Вопрос

Кажется, что это ниже не работает так, как я ожидал, несмотря на то, что $_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']){
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top