Question

Cela ne semble pas ci-dessous travailler comment j'attendre, événement que $ _GET [ « friendID »] = 55, il retourne NULL

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>
Était-ce utile?

La solution

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

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

Autres conseils

de version PHP 7, vous pouvez utiliser l'opérateur null-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 sur est " truthy " valeur, 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";

Si vous êtes paresseux et risqué, vous pouvez utiliser @ et forme courte de opérateur ternaire .

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

Actuellement, vous travaillez avec l'opérateur ternaire:

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

Décomposer à une déclaration if-else et il ressemble à ceci:

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

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

!isset($_GET['friendid'])

Notez le point d'exclamation (!) Devant la fonction isset. Il est une autre façon de dire « le contraire de ». 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 cette valeur.

Mais vraiment, il romprait depuis $_GET['friendid'] n'existe même pas. Et vous ne pouvez pas prendre la valeur de quelque chose qui est pas là.

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

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

Qu'est-ce que vous voulez est de supprimer l'exclamation et la valeur de $friendid prendra la valeur de $_GET['friendid'] si elle a été précédemment défini.

La meilleure solution pour cette question, à savoir si vous devez également « vérifier la chaîne vide », est vide () .

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

vide () ne vérifie seulement si la variable est définie, mais retourne plus faux si elle est quelque chose alimenté qui pourrait être considéré comme « vide », comme une chaîne vide, tableau vide, le nombre entier 0, Boolean false, ...

De votre réponse à Philippe Je pense que vous devez avoir un regard sur les différences entre isset .

En résumé, isset() retournera TRUE booléen si la variable existe. Par conséquent, si vous deviez faire

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

$exists sera TRUE existe $_GET['friendid']. Si ce n'est pas ce que vous voulez que je vous suggère de regarder dans vide. Vide retournera TRUE sur la chaîne vide ( « »), qui semble être ce que vous attendez. Si vous utilisez vide, s'il vous plaît se référer à la documentation que je lié à, il y a d'autres cas où vide retourne vrai où vous ne pouvez pas attendre, ces cas sont explicitement documentés sur le lien ci-dessus.

si friendID est pas set, friendID = friendID sinon friendID = vide

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

Un peu confus, mais savoir ne pas avoir le! comme dans ... isset (avar de $) par rapport à! isset (avar $) peut faire tout à fait la différence.

Alors la! en place, est plus indiquant 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 confus avec si A $ = « » alors .... il fonctionne. (Ou si $ A = "" pour ceux de PHP).

Je trouve cette utilisation de chaînes et toutes les variables comme des chaînes à être très intimidant parfois. Même à travers la confusion, je peux vraiment comprendre pourquoi ... juste rend les choses un peu difficile à saisir pour moi.

J'utilise opérateur nul opérateur coalescent si l'état comme celui-ci

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

Ce qui est équivalent à

if(isset($myArr['user']) && $myArr['user']){
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top