web-dev-qa-db-fra.com

isset PHP isset ($ _GET ['quelque chose']))? $ _GET ['quelque chose']: ''

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?

31
user1625186

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 :)
70
uınbɐɥs

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'
6
sciritai

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

5

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";
}
4
FThompson

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

2
mathematician1975

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 = "";
}
1
bmorenate

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:

  • Cela s’intègre parfaitement sur une ligne et indique clairement ce qui se passe.
  • C'est lisible que $value = isset($_GET['something']) ? $_GET['something'] : '';
  • Réduction du risque d'erreur de copier/coller ou de faute de frappe: $value=isset($_GET['something'])?$_GET['somthing']:'';
  • Il est compatible avec les php plus anciens et plus récents.

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']);
1
TrophyGeek

? est appelé opérateur ternaire (conditionnel): exemple

1
Nikola Ninkovic