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?

25
demandé sur user1625186 2012-08-26 03:17:59

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 :)
56
répondu uınbɐɥs 2012-08-25 23:29:55

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'
6
répondu sciritai 2012-08-25 23:21:47

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";
}
4
répondu Vulcan 2012-08-25 23:23:23

à 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

3
répondu George Garchagudashvili 2016-07-25 12:11:34

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

2
répondu mathematician1975 2012-08-25 23:21:22

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

1
répondu Nikola Ninkovic 2012-08-25 23:21:35

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 = "";
}
1
répondu bmorenate 2012-08-25 23:26:33

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']);
1
répondu TrophyGeek 2017-11-26 07:37:36