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;
?>
Supprimez le !
. Vous ne voulez pas nier l'expression.
$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
À 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";
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';
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.
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, ..
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.
si friendid estPASset, friendid = amiid sinon amiid = vide
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']){
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.