isset PHP isset ($GET['something'])? $ GET['quelque chose']: "
je cherche à développer mes connaissances en PHP, et je suis tombé sur quelque chose que je ne suis pas sûr de savoir ce que c'est ou même comment le chercher. Je tricoterai php.net code isset, et je vois isset($_GET['something']) ? $_GET['something'] : ''
je comprends les opérations normales de l'isset, comme if(isset($_GET['something']){ If something is exists, then it is set and we will do something }
mais je ne comprends pas la ? en répétant l'obtenir à nouveau, l' : ou l' ". Est-ce que quelqu'un peut m'aider à comprendre ou au moins m'indiquer la bonne direction?
8 réponses
Il est communément appelé "abréviation" ou le Opérateur Ternaire.
$test = isset($_GET['something']) ? $_GET['something'] : '';
signifie
if(isset($_GET['something'])) {
$test = $_GET['something'];
} else {
$test = '';
}
Pour le décomposer:
$test = ... // assign variable
isset(...) // test
? ... // if test is true, do ... (equivalent to if)
: ... // otherwise... (equivalent to else)
Ou...
// test --v
if(isset(...)) { // if test is true, do ... (equivalent to ?)
$test = // assign variable
} else { // otherwise... (equivalent to :)
cela s'appelle un opérateur ternaire et il est principalement utilisé à la place d'une instruction if-else.
Dans l'exemple que vous avez donné, il peut être utilisé pour récupérer une valeur dans un tableau donné isset renvoie true
isset($_GET['something']) ? $_GET['something'] : ''
est équivalent à
if (isset($_GET['something'])) {
$_GET['something'];
} else {
'';
}
bien sûr, ce n'est pas très utile à moins que vous ne l'assigniez à quelque chose, et peut-être même assigner une valeur par défaut pour une valeur soumise par un utilisateur.
$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'
vous avez rencontré le opérateur ternaire. Il s'agit d'une déclaration de base si-else. Les morceaux de code suivants font la même chose.
Ternaire:
$something = isset($_GET['something']) ? $_GET['something'] : "failed";
if-else:
if (isset($_GET['something'])) {
$something = $_GET['something'];
} else {
$something = "failed";
}
à Partir de php 7, vous pouvez l'écrire encore plus court:
$age = $_GET['age']) ?? 27;
et cela signifie que si age param est fourni dans l'url, il sera défini à $age
var, ou par défaut à 27
Voir toutes les nouvelles fonctionnalités de php 7
on l'appelle l'opérateur ternaire. C'est un raccourci pour un bloc if-else. Voir ici pour un exemple http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
? est appelé opérateur ternaire (conditionnel):exemple
Ce que vous voyez est appelé Opérateur Ternaire, et vous pouvez trouver le PHP de mise en œuvre ici. C'est un if else
déclaration.
if (isset($_GET['something']) == true) {
thing = isset($_GET['something']);
} else {
thing = "";
}
Si vous voulez une chaîne vide par défaut alors un moyen privilégié est l'un de ces (selon vos besoins):
$str_value = strval($_GET['something']);
$trimmed_value = trim($_GET['something']);
$int_value = intval($_GET['somenumber']);
si le paramètre url something
n'existe pas dans l'url$_GET['something']
retour null
strval($_GET['something'])
-> strval(null)
-> ""
et votre variable $value
correspond à une chaîne vide.
trim()
pourrait être préféré àstrval()
selon le code (par exemple un nom paramètre pourraient vouloir l'utiliser)intval()
si seules des valeurs numériques sont attendues et que la valeur par défaut est zéro.intval(null)
->0
Cas:
...&something=value1&key2=value2
(typique)
...&key2=value2
(paramètre manquant de l'url $_GET retournera null pour elle)
...&something=+++&key2=value
(paramètre est " "
)
Pourquoi c'est une approche privilégiée:
- Il s'adapte parfaitement sur une seule ligne et il est clair ce qui se passe.
- c'est lisible que
$value = isset($_GET['something']) ? $_GET['something'] : '';
- plus faible risque de copier / coller une erreur ou une faute de frappe:
$value=isset($_GET['something'])?$_GET['somthing']:'';
- il est compatible avec les php plus anciens et plus récents.
mise à Jour Le mode Strict peut exiger quelque chose comme ceci:
$str_value = strval(@$_GET['something']);
$trimmed_value = trim(@$_GET['something']);
$int_value = intval(@$_GET['somenumber']);