Test simple de PHP isset

ci-dessous ne semble pas fonctionner comment je pourrais l'attendre, d'événement si $_GET['friendid'] = 55, il est de retour NULL

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>
24
demandé sur random 2009-08-08 17:19:17
la source

9 ответов

Supprimer !. Vous ne voulez pas de nier l'expression.

$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
42
répondu Philippe Gerber 2009-08-08 17:24:23
la source

la version de PHP 7, vous pouvez utiliser l'opérateur nul-coalescent (double "?") pour cela:

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

en PHP 5.3+, si tout ce que vous vérifiez est un" truthy "value, vous pouvez utiliser l '"opérateur Elvis" (notez que ceci ne coche pas isset).

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
46
répondu Greg 2015-03-05 19:45:01
la source

Si vous êtes paresseux et risqué, vous pouvez utiliser opérateur de contrôle des [email protected] et la forme courte de opérateur ternaire.

$friendid = @$_GET['friendid']?: 'empty';
11
répondu Dima Mironov 2012-02-06 03:18:42
la source

vous travaillez actuellement avec l'opérateur ternaire:

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

décomposer en un if-else déclaration et il ressemble à ceci:

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

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

!isset($_GET['friendid'])

Notez le point d'exclamation (!) en face de l' isset fonction. C'est une autre façon de dire, "au contraire". Ce que vous faites ici est de vérifier qu'il n'y a pas de valeur déjà définie dans $_GET['friendid']. Et si oui, $friendid devrait prendre sur cette valeur.

mais vraiment, il se casserait depuis $_GET['friendid'] n'existe même pas. Et tu ne peux pas prendre la valeur de quelque chose qui n'est pas là.

en prenant cela depuis le début, vous avez défini une valeur pour $_GET['friendid'], de sorte que le premier if la condition est maintenant false et la transmet à else option.

Dans ce cas, définissez la valeur de l' $friendid variable à empty.

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

5
répondu random 2009-08-08 18:15:09
la source

La meilleure solution pour cette question, i.e. si vous avez aussi besoin de 'vérifier la chaîne vide', est empty ().

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

empty () ne vérifie pas seulement si la variable est définie, mais retourne en outre false si elle est alimentée quelque chose qui pourrait être considéré comme 'vide', comme une chaîne vide, un tableau vide, l'entier 0, le booléen false, ...

2
répondu Sygmoral 2011-05-06 02:29:36
la source

de votre réponse à Philippe je pense que vous avez besoin d'avoir un regard sur les différences entre vide et isset.

pour résumer isset () retournera booléen TRUE si la variable existe. Par conséquent, si vous n'

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

$existe VRAI que $_GET['friendid'] existe. Si ce n'est pas ce que vous voulez, je vous suggère de chercher à vide. Vide renvoie TRUE sur la chaîne vide (""), qui semble être ce que vous attendez. Si vous ne utilisez empty, s'il vous plaît référez-vous à la documentation à laquelle j'ai lié, il y a d'autres cas où empty retournera true où vous ne pouvez pas vous y attendre, ces cas sont explicitement documentés au lien ci-dessus.

HTH.

1
répondu mdec 2009-08-08 17:56:49
la source

si friendid est NOT set, friendid = friend otherwise friendid = empty

0
répondu Alix Axel 2009-08-08 17:25:54
la source

Ok, j'ai peut-être eu un problème similaire, n'étant pas familier avec le ! situation jasondavis avait.

un peu confus mais découvrant ne pas avoir le ! comme dans... isset ($avar) comparé à !isset($avar) peut faire toute la différence.

Donc avec le ! en place, est plutôt 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 un$="" alors.... travail. (ou si $a="" pour ceux de PHP ).

je trouve cette utilisation de chaînes et de les variables toutes en tant que chaînes de caractères sont parfois très intimidantes. Même à travers la confusion, je peux comprendre pourquoi... fait juste les choses un peu difficile à comprendre pour moi.

0
répondu PHPLearner 2014-03-19 12:55:09
la source

j'utilise Null, la coalescence de l'opérateur opérateur si la condition comme ceci

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

est équivalent à

if(isset($myArr['user']) && $myArr['user']){
0
répondu C2486 2017-10-26 15:18:05
la source

Autres questions sur