Que sont les opérateurs PHP"?"et ":" appelés et que font-ils?

que sont les opérateurs ? et : en PHP?

par exemple:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)
41
demandé sur Peter Mortensen 2009-07-03 21:27:15

9 réponses

C'est le opérateur conditionnel .

$x ? $y : $z

signifie "Si $x est vrai, alors utiliser $y ; autrement utiliser $z ".

il a également une forme courte.

$x ?: $z

signifie "Si $x est vrai, alors utiliser $x ; autrement utiliser $z ".

les gens vous diront que ?: est"l'opérateur ternaire". C'est mauvais. ?: est a opérateur ternaire, ce qui signifie qu'il a trois opérandes. Les gens de liquidation de la pensée, son nom est "l'opérateur ternaire" parce que c'est souvent le seul opérateur ternaire d'une langue donnée.

70
répondu chaos 2016-04-26 15:43:57

je vais écrire un peu sur ternaires, ce qu'ils sont, comment les utiliser, quand et pourquoi les utiliser et quand ne pas les utiliser.

qu'est Ce qu'un opérateur ternaire?

un ternaire ? : signifie if et else . C'est principalement ça. Voir " opérateurs ternaires "à mi-chemin cette page pour plus d'un explication.

en PHP 5.3 :

depuis PHP 5.3, il est possible d'omettre la partie centrale de l'opérateur ternaire. Expression express1 ?: expr3 retourne expr1 si expr1 est évalué à TRUE, et expr3 autrement.

en PHP 7.0

PHP 7 a un nouvel opérateur nul Coalesce. C'est le même que pour un ternaire, mais est également appelé un " isset ternaire ". Cela permet également un ensemble de ternaires enchaînés qui suppriment la nécessité des contrôles isset ().

En PHP 5, si vous souhaitez utiliser un ternaire potentiellement inexistante variable alors que vous auriez à effectuer un isset() au début de l'ternaire déclaration:

$result = isset($nonExistentVariable) ? $nonExistentVariable : ‘default’;

en PHP 7, vous pouvez maintenant faire ceci à la place:

$result = $nonExistentVariable ?? ‘default’;

L'opérateur Null Coalesce ne fonctionne pas avec une corde vide, cependant, gardez cela à l'esprit. La grande chose à ce sujet est que vous pouvez également enchaîner les opérateurs pour des contrôles multiples pour des variables multiples, fournissant une sorte de sauvegarde selon si chaque variable dans la chaîne existe ou non:

$user = $userImpersonatingAnotherUser ?? $loggedInUser ?? “Guest”;

en PHP, avec des systèmes où un utilisateur peut se connecter, il n'est pas rare qu'un administrateur puisse se faire passer pour un autre utilisateur à des fins de test. Ci-dessus exemple, si l'utilisateur n'est pas usurper l'identité d'un autre utilisateur, et aussi d'un utilisateur connecté n'existe pas, alors l'utilisateur sera invité de l'utilisateur à la place. En savoir plus si vous ne comprenez pas encore ce que sont les ternaires et comment ils sont utilisés, puis revenir sur ce point pour voir comment le nouveau PHP

comment les ternaires sont-ils utilisés?

voici à quoi ressemble une déclaration normale if :

if (isset($_POST['hello']))
{
    $var = 'exists';
}
else
{
    $var = 'error';
}

Nous allons raccourcir le bas dans un ternaire.

$var = isset($_POST['hello']) ? 'exists' : 'error';
                 ^            ^     ^    ^     |
                 |           then   |   else   |
                 |                  |          |
          if post isset         $var=this   $var=this

Beaucoup plus court, mais peut-être plus difficile à lire. Non seulement ils sont utilisés pour définir des variables comme $var dans l'exemple précédent, mais vous pouvez également le faire avec echo , et pour vérifier si une variable est fausse ou non:

$isWinner = false;

// Outputs 'you lose'
echo ($isWinner) ? 'You win!' : 'You lose';

// Same goes for return
return ($isWinner) ? 'You win!' : 'You lose';

pourquoi les gens les utilisent-ils?

je pense que les ternaires sont sexy. Certains développeurs aiment montrer, mais parfois ternaires juste look nice dans votre code, surtout quand combiné avec d'autres caractéristiques comme PHP 5.4 dernier echos courts .

<?php 
    $array = array(0 => 'orange', 1 => 'multicoloured'); 
?>

<div>
    <?php foreach ($array as $key => $value) { ?>
        <span><?=($value==='multicoloured')?'nonsense':'pointless'?></span>
    <?php } ?>
</div>

<!-- Outputs:
    <span>
        pointless
    </span>
    <span>
        nonsense
    </span> 
-->

un peu hors sujet, quand vous êtes dans un "view/template" (si vous séparez vos préoccupations à travers le MVC paradigme), vous voulez que le moins de logique côté serveur possible. Donc, en utilisant des ternaires et d'autres le code à main courte est parfois la meilleure façon d'avancer. Par "autre code à main courte", je veux dire:

if ($isWinner) :
    // Show something cool
endif;

Note, personnellement je n'aime pas ce genre de raccourci si / endif non-sens

Quelle est la vitesse de l'opérateur ternaire?

les gens aiment les micro-optimisations. Ils viennent de faire. Donc pour certains, il est important de savoir à quel point les choses comme les ternaires sont plus rapides que déclarations normales if / else .

Lire ce post , les différences sont d'environ 0,5 ms. C'est beaucoup!

oh attends, non ça ne l'est pas. C'est seulement beaucoup si vous en faites des milliers et des milliers d'affilée, à plusieurs reprises. Lequel vous ne serez pas. Ne vous inquiétez donc pas du tout de l'optimisation de la vitesse, c'est absolument inutile ici.

quand ne pas utiliser de ternaires

votre code devrait être:

  • facile à lire
  • facile à comprendre
  • facile à modifier

de toute évidence, cela dépend du niveau de connaissance de l'intelligence et du codage des personnes / du niveau général de compréhension de ces concepts lorsqu'on vient regarder votre code. Un simple ternaire simple comme les exemples précédents sont ok, quelque chose comme le suivant, cependant, est pas ce que vous devriez faire:

echo ($colour === 'red') ? "Omg we're going to die" :
     ($colour === 'blue' ? "Ah sunshine and daisies" :
     ($colour === 'green' ? "Trees are green"
     : "The bloody colour is orange, isn't it? That was pointless."));

qui était inutile pour trois raisons:

  • Ridiculement long ternaire intégration
  • aurait pu utiliser un switch statement
  • il était orange en premier lieu

Conclusion

ternaires sont vraiment simples et rien de trop énervé. Ne considérez pas tout améliorations de vitesse, il ne fera vraiment pas de différence. Utilisez - les quand ils sont simple et look nice , et assurez-vous toujours que votre code sera lisible par d'autres à l'avenir. Si cela signifie pas de ternaires, alors n'utilisez pas de ternaires.

25
répondu Jimbo 2017-05-23 10:29:50

ça s'appelle un opérateur ternaire . Si la première expression est vraie, HTTPS_SERVER est utilisé, sinon HTTP_SERVER est choisi.

il s'agit essentiellement d'un raccourci if déclaration, et le code ci-dessus pourrait également être réécrit comme suit:

if ($request_type == 'SSL') {
   HTTPS_SERVER;
}
else {
   HTTP_SERVER;
}
12
répondu John T 2015-11-29 13:59:05

on l'appelle parfois l'opérateur ternaire conditionnel. Ternaire signifie qu'il a trois arguments, comme x ? y : z . Fondamentalement, il vérifie si x est vrai; si c'est le cas, alors mettez y à la place de cette opération, sinon z .

$hello = $something ? "Yes, it's true" : "No, it's false";
5
répondu Deniz Dogan 2009-07-21 05:20:21

opérateur Conditionnel ? : est un opérateur qui est utilisé pour vérifier une condition et sélectionnez une valeur en fonction de la valeur de la condition. Elle est exprimée sous la forme suivante:

variable = condition ? expression1 : expression2;

Il fonctionne comme suit...

  1. tout d'abord, condition est évalué.
  2. si la condition est vraie, alors expression1 is evaluated. Et la valeur de expression1 est attribuée à la variable .
  3. si la condition est fausse, alors expression2 est évaluée. Et la valeur de expression2 est attribuée à la variable.

par exemple:

x = (a>b) ? 5 : 9

en ceci, pour x, d'abord le la condition (a>b) est évaluée. Si cette condition devient vraie, alors x deviendra la valeur 5 (ie, x=5). Mais si la condition (a>b) devient faux, alors x atteindra la valeur 9 (ie, x=9).

Opérateur Ternaire

parfois opérateur conditionnel ? : est également appelé un opérateur ternaire. Il en est ainsi parce qu'il comporte trois opérandes. Par exemple:

x ? y : z

ici, x,y et z sont les trois opérandes. Si la condition x est true, alors la valeur y est assignée, sinon la valeur z est assignée.

4
répondu User that is not a user 2017-09-11 06:30:40

c'est une façon courte d'écrire des phrases if . Il est également utilisé dans D'autres langues comme Java, JavaScript et d'autres.

votre code,

$protocol = $request_type == 'SSL' ? HTTPS_SERVER : HTTP_SERVER;

peut s'écrire comme ceci:

if ($request_type == 'SSL')
    $protocol = HTTPS_SERVER;
else
    $protocol = HTTP_SERVER;
2
répondu xpepermint 2015-11-29 14:06:32

Qui est une ligne si la déclaration:

condition ? true : false

traduit à une déclaration si ordinaire dans votre cas, qui serait:

if($request_type == 'SSL') HTTPS_SERVER;
else HTTP_SERVER;
0
répondu Yngve Sneen Lindal 2009-07-22 03:13:00

c'est une façon fantaisiste d'écrire une déclaration if - else . Certains disent que c'est plus facile à lire, d'autres non.

opérateur ternaire à Wikipedia

0
répondu Daniel Magnusson 2015-11-29 14:04:38

comme le dit John T, il est appelé un opérateur ternaire et est essentiellement une version abrégée d'un If /else statement. Votre exemple, en tant qu'énoncé complet si / else, se lirait:

if($request_type == 'SSL')
{
    HTTPS_SERVER;
}
else
{
    HTTP_SERVER;
}
-1
répondu Mathew 2009-07-03 17:32:32