Pergunta

Este abaixo não parece trabalho como eu esperaria que, evento embora $ _GET [ 'friendid'] = 55 ele está retornando NULL

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>
Foi útil?

Solução

Remova o !. Você não quer para negar a expressão.

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

Outras dicas

A partir de do PHP 7 liberação , você pode usar o operador coalescentes nulo (double "?") Para isso:

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

Em PHP 5.3+, se tudo que você está verificando em um " truthy " valor, você pode usar o "operador de Elvis" (note que este não verifica isset).

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";

Se você é preguiçoso e arriscada, você pode usar controle de erros @ e forma abreviada de ternário operador .

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

Atualmente você está trabalhando com o operador ternário:

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

decompô-lo para uma declaração if-else e parece que isso:

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

Olhe o que está realmente acontecendo na demonstração if:

!isset($_GET['friendid'])

Observe o ponto de exclamação (!) Na frente da função isset. É uma outra maneira de dizer, "o oposto de". O que você está fazendo aqui é a verificação de que não há nenhum valor já definido na $_GET['friendid']. E se assim for, $friendid deve assumir esse valor.

Mas, realmente, ele iria quebrar desde $_GET['friendid'] nem sequer existe. E você não pode tomar o valor de algo que não está lá.

Tomar-lo desde o início, você definiu um valor para $_GET['friendid'], de modo que a primeira condição if agora é falsa e passa para a opção else.

Neste caso, defina o valor da variável $friendid para empty.

O que você quer é remover a exclamação e, em seguida, o valor de $friendid vai assumir o valor de $_GET['friendid'] se ele tiver sido definido anteriormente.

A melhor solução para esta questão, ou seja, se você também precisa 'cheque para a cadeia vazia', é empty () .

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

esvaziar () não apenas verifica se a variável é definida, mas além disso, retorna false se for alimentado qualquer coisa que poderia ser considerado 'vazio', como uma cadeia vazia, array vazio, o inteiro 0, boolean false, ...

A partir da sua resposta a Philippe Eu acho que você precisa ter um olhar para as diferenças entre o vazia e isset .

Para resumir, isset() irá retornar boolean TRUE se existe a variável. Portanto, se você fosse fazer

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

$exists será TRUE como existe $_GET['friendid']. Se isto não é o que você quer que eu sugiro que você olhar para vazio. Esvaziar retornará TRUE em uma string vazia ( ""), que parece ser o que você está esperando. Se você uso esvaziar, por favor , consulte a documentação que eu ligado, há outros casos em vazio retornará true onde você não pode esperar que, nestes casos, são explicitamente documentada no link acima.

Se friendid é não set, = friendid friendid outra forma friendid = esvaziar

Ok, eu pode ter tido um problema semelhante não estar familiarizado com o! situação como jasondavis tinha.

tipo de confusão mas descobrir não ter o! como em ... isset ($ avar) em comparação com! isset ($ avar) pode fazer muita diferença.

Assim, com a! no lugar, é mais dizendo um sim como em

    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';

Foi muito menos confuso com o que A $ = "" então .... o trabalho dele. (Ou se $ A = "" para aqueles de PHP).

I encontrar este uso de cordas e todas as variáveis ??como strings a ser muito difícil às vezes. Mesmo com a confusão, eu posso realmente entender por que ... apenas torna as coisas um pouco difíceis de entender para mim.

Eu estou usando nulo coalescentes operador operador em se condição como esta

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

O que é equivalente a

if(isset($myArr['user']) && $myArr['user']){
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top