Teste isset simples PHP
-
12-09-2019 - |
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;
?>
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 ??p>
if($myArr['user'] ?? false){
O que é equivalente a
if(isset($myArr['user']) && $myArr['user']){