web-dev-qa-db-fra.com

Simple PHP test isset

Ce qui suit ne semble pas fonctionner comme prévu, même si $ _GET ['friendid'] = 55 renvoie NULL

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>
23
JasonDavis

Supprimez le !. Vous ne voulez pas nier l'expression.

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

À partir de - PHP version 7 , vous pouvez utiliser l'opérateur de fusion nulle (double "?") Pour cela:

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

Dans PHP 5.3+, si vous ne cochez que la valeur " vérité ", vous pouvez utiliser "l'opérateur Elvis" (notez que cela ne vérifie pas isset).

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

Si vous êtes paresseux et risqué, vous pouvez utiliser opérateur de contrôle des erreurs @ et une forme abrégée de opérateur ternaire .

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

Vous travaillez actuellement avec l'opérateur ternaire:

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

Décomposez-le en une instruction if-else et cela ressemble à ceci:

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

Regardez ce qui se passe réellement dans la déclaration if:

!isset($_GET['friendid'])

Notez le point d'exclamation (!) Devant la fonction isset. C'est une autre façon de dire "le contraire de". Ce que vous faites ici, c'est vérifier qu'aucune valeur n'est déjà définie dans $_GET['friendid']. Et si oui, $friendid devrait prendre cette valeur. 

Mais vraiment, cela casserait puisque $_GET['friendid'] n'existe même pas. Et vous ne pouvez pas prendre la valeur de quelque chose qui n'existe pas.

Depuis le début, vous avez défini une valeur pour $_GET['friendid'], de sorte que la première condition if est maintenant false et la transmet à l'option else

Dans ce cas, définissez la valeur de la variable $friendid sur empty.

Ce que vous voulez, c'est supprimer l’exclamation, puis la valeur de $friendid prendra la valeur de $_GET['friendid'] si elle a déjà été définie.

5
random

La meilleure solution pour cette question, c’est-à-dire que si vous devez également «vérifier la chaîne vide», est empty ()

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

empty () non seulement vérifie si la variable est définie, mais renvoie également false si elle alimente tout ce qui pourrait être considéré comme 'vide', tel qu'une chaîne vide, un tableau vide, l'entier 0, boolean false, .. 

2
Sygmoral

De votre réponse à Philippe, je pense que vous devez examiner les différences entre empty et isset

Pour résumer, isset() retournera un booléen VRAI si la variable existe. Par conséquent, si vous deviez faire 

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

$exists sera VRAI car $_GET['friendid'] existe. Si ce n'est pas ce que vous voulez, je vous suggère de regarder dans le vide. Vide retournera TRUE sur la chaîne vide (""), ce qui semble être ce à quoi vous vous attendiez. Si vous utilisez vide, please, reportez-vous à la documentation que j'ai liée, il existe d'autres cas où vide renverra la valeur true si vous ne vous y attendez pas. Ces cas sont explicitement décrits au lien ci-dessus.

1
mdec

si friendid estPASset, friendid = amiid sinon amiid = vide

0
Alix Axel

J'utilise Opérateur de coalescence nul opérateur en si condition comme ça

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

Qui est équivalent à 

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

D'accord, j'ai peut-être eu un problème similaire ne pas être familier avec le! situation que jasondavis avait.

Un peu déroutant mais trouver de ne pas avoir le! comme dans ... isset ($ avar) par rapport à! isset ($ avar) peut faire toute la différence.

Donc avec le! en place, est plus affirmant un OUI comme dans

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

Était beaucoup moins déroutant avec si A $ = "" alors .... ça marche. (ou si $ A = "" pour ceux de PHP).

Je trouve cette utilisation des chaînes et des variables comme des chaînes parfois très décourageantes. Même à travers la confusion, je peux réellement comprendre pourquoi ... rend les choses un peu difficiles à saisir pour moi.

0
PHPLearner