Je cherche à développer mon PHP connaissance, et je suis tombé sur quelque chose que je ne suis pas sûr de ce que c'est ou comment même le chercher. Je regarde le code php.net isset, et Je vois isset($_GET['something']) ? $_GET['something'] : ''
Je comprends les opérations normales sur isset, telles que if(isset($_GET['something']){ If something is exists, then it is set and we will do something }
, mais je ne comprends pas le?, Répétant le get, le: ou le ''. Est-ce que quelqu'un peut m'aider à résoudre ce problème ou au moins à me diriger dans la bonne direction?
Il est communément appelé "sténographie" ou le opérateur ternaire .
$test = isset($_GET['something']) ? $_GET['something'] : '';
veux dire
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 est principalement utilisé à la place d'une déclaration if-else.
Dans l'exemple que vous avez donné, il peut être utilisé pour extraire une valeur d'un tableau, car isset renvoie true
isset($_GET['something']) ? $_GET['something'] : ''
est équivalent à
if (isset($_GET['something'])) {
$_GET['something'];
} else {
'';
}
Bien sûr, il n’est pas très utile si vous ne l’attribuez pas à quelque chose, voire une valeur par défaut pour une valeur soumise par l’utilisateur.
$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'
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 réglé sur $age
var, ou sera 27 par défaut
Voir tout nouvelles fonctionnalités de php 7
Vous avez rencontré le opérateur ternaire . Son but est celui d'une déclaration de base if-else. Les morceaux de code suivants font la même chose.
Ternaire:
$something = isset($_GET['something']) ? $_GET['something'] : "failed";
Sinon:
if (isset($_GET['something'])) {
$something = $_GET['something'];
} else {
$something = "failed";
}
C'est ce qu'on 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
Ce que vous regardez est appelé un opérateur ternaire , et vous pouvez trouver le implémentation PHP 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 une méthode préférée est l'une de celles-ci (selon vos besoins):
$str_value = strval($_GET['something']);
$trimmed_value = trim($_GET['something']);
$int_value = intval($_GET['somenumber']);
Si le paramètre d'URL something
n'existe pas dans l'URL , alors $_GET['something']
retournera null
strval($_GET['something'])
-> strval(null)
-> ""
et votre variable $value
est définie sur une chaîne vide.
trim()
peut être préférable à strval()
en fonction du code (par exemple, un paramètre Nom peut 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 à considérer:
...&something=value1&key2=value2
(Typique)
...&key2=value2
(Paramètre manquant dans l'URL $ _GET retournera null pour cela)
...&something=+++&key2=value
(Le paramètre est " "
)
Pourquoi est-ce une approche préférée:
$value = isset($_GET['something']) ? $_GET['something'] : '';
$value=isset($_GET['something'])?$_GET['somthing']:'';
Mettre à jour Le mode strict peut nécessiter quelque chose comme ceci:
$str_value = strval(@$_GET['something']);
$trimmed_value = trim(@$_GET['something']);
$int_value = intval(@$_GET['somenumber']);
? est appelé opérateur ternaire (conditionnel): exemple