it-swarm.com.ru

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

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

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>
23
JasonDavis

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

$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
44
Philippe Gerber

Начиная с 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";
49
Greg

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

$friendid = @$_GET['friendid']?: 'empty';
11
Dima Mironov

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

$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'], если оно было установлено ранее.

5
random

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

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

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

2
Sygmoral

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

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

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

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

1
mdec

если friendid =НЕset, friendid = friendid, иначе friendid = empty

0
Alix Axel

Я использую Нулевой оператор слияния оператор, если условие, как это

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

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

if(isset($myArr['user']) && $myArr['user']){
0
Niklesh Raut

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

Вроде запутанно, но выяснилось, что не имея! как в ... 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
PHPLearner