Maison  >  Article  >  développement back-end  >  Analyse approfondie de l'opérateur "? :" en PHP pour comprendre son utilisation !

Analyse approfondie de l'opérateur "? :" en PHP pour comprendre son utilisation !

青灯夜游
青灯夜游avant
2021-09-30 19:41:3216349parcourir

Cet article vous donnera une analyse approfondie de l'opérateur "? :" (expression ternaire) en PHP pour voir sa fonction, comment l'utiliser et quel est son effet ? J'espère que cela aidera tout le monde ! À quoi ressemblent les opérateurs

? et : en Analyse approfondie de l'opérateur

PHP ? ?: 运算符是什么样的?

如下:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)

它是一个条件运算符。

$x ? $y : $z

表示 “如果 $x 是 true,那么采用 $y;如果不是则采用 $z” 。

它还可以简化。

$x ?: $z

表示 “如果 $x 是 true,那么采用 $x;如果不是则采用 $z” 。

有人会说 ?: 是 “三元运算符” 。这是不对的。 ?: 如果是三元运算符,那么它应该有三个操作数。 之所以这么认为是因为它通常是当前语言唯一的三元运算符。

下面将介绍什么是三元,怎么使用,什么时候使用,为什么使用,以及什么时候不能用。

什么是三元操作符?

? : 是 if 和 else 的缩写。这里 中间有关于 “三元运算符” 的官方说明。

自 PHP 5.3:

从 PHP 5.3 开始,可以省略三元运算符中间部分。表达式 expr1 ?: expr3 ,如果 expr1 是 TRUE,则返回 expr1 ,否则返回 expr3 。

自 PHP 7.0

PHP 7 有新的 Null 合并运算符。这和三元运算一样,也被叫做 “isset 三元元算符” 。这可以从链式三元元算中移除 isset() 。

在 PHP 5 中,如果在一个可能不存在的变量上使用三元运算符,必须要在三元语句的开头使用 isset():

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

在 PHP 7 中,可以这样做:

$result = $nonExistentVariable ?? ‘default’;

记住 Null 合并运算符不能处理空字符串。可以链式的使用它来检查多个变量:

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

PHP 中,可登录的系统,管理员冒充用户进行测试的情况并不少见。如上,如果用户不冒充另一个用户,且没有登录的话,他将成为一个访客。如果还不理解的话,继续读下去,了解一下三元运算符是什么,是如何使用的,再后过头来看看在新 PHP

怎么使用三元运算符?

正常 if 语句如下:

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

使用三元运算符简化。

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

更简短,但是难理解。这不仅可以像上面这样用在变量 $var 上,还可以像下面这样在 echo 中使用,来检查变量是不是 false:

$isWinner = false;

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

// 同上
return ($isWinner) ? 'You win!' : 'You lose';

为什么要使用他们?

我觉得三元运算是迷人的。一些开发者想要表现,但是三元运算符就 不错特别是结合其他功能的时候,例如 PHP 5.4 的最新 short echos.

<?php 
    $array = array(0 => &#39;orange&#39;, 1 => &#39;multicoloured&#39;); 
?>

<p>
    <?php foreach ($array as $key => $value) { ?>
        <span><?=($value===&#39;multicoloured&#39;)?&#39;nonsense&#39;:&#39;pointless&#39;?></span>
    <?php } ?>
</p>

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

稍微跑题了,在 'view/template' 中 (注意 MVC 范例),如果要用上一点服务端的逻辑,使用三元运算符或者其他短句将会是最好的方式。“其他短句”,像下面这样:

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

注意,我个人不喜欢这样的无意义的短句。

三元运算符有多快?

人们喜欢微优化。也是这样做的。因此清楚三元运算比一般的 if / else 语句快多少是很重要的。

从 文章,了解到大约快 0.5ms。这已经快很多了!

等等,不是这样的。这个结论源于反复在一行代码中进行成千上万次的运算。因此完全不用担心,这是没有意义的。

不实用三元运算符

代码应该:

  • 易读
  • 易理解
  • 易修改

显然,这取决于看代码人的编码能力和对此类问题的理解能力。之前的简单示例没有问题,但是下面这样的,是不好的:

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

原因如下:

  • 三元嵌套过长
  • 可以使用 switch
  • est la suivante :
rrreee

C'est un opérateur conditionnel. rrreee signifie "si $x est vrai, alors utilisez $y ; sinon, utilisez $z". Cela peut aussi être simplifié.

rrreee

signifie "si $x est vrai, alors utilisez $x ; sinon, utilisez $z". Certains diraient ? : c'est "l'opérateur ternaire". Ce n'est pas correct. ? : S'il s'agit d'un opérateur ternaire, alors il doit avoir trois opérandes. La raison en est qu’il s’agit généralement du seul opérateur ternaire dans les langages actuels.

Ce qui suit présente ce qu'est le ternaire, comment l'utiliser, quand l'utiliser, pourquoi l'utiliser et quand ne pas l'utiliser.

Qu'est-ce que l'opérateur ternaire ?

🎜 ? : est l'abréviation de if et else. Il y a une description officielle de « l’opérateur ternaire » au milieu. 🎜🎜🎜Depuis PHP 5.3🎜 :🎜
🎜À partir de PHP 5.3, la partie médiane de l'opérateur ternaire peut être omise. L'expression expr1 ? : expr3 renvoie expr1 si expr1 est VRAI et expr3 sinon. 🎜
🎜🎜Depuis PHP 7.0🎜🎜
🎜PHP 7 a un nouvel opérateur de coalescence Null. C'est le même que l'opérateur ternaire, également connu sous le nom d'« opérateur ternaire isset ». Cela supprime isset() de l'arithmétique ternaire chaînée. 🎜
🎜En PHP 5, si vous utilisez l'opérateur ternaire sur une variable qui n'existe peut-être pas, vous devez utiliser isset() au début de l'instruction ternaire : 🎜rrreee🎜En PHP 7, vous pouvez faire ceci : 🎜rrreee🎜N'oubliez pas que l'opérateur de coalescence Null ne peut pas gérer les chaînes vides. Vous pouvez l'utiliser dans une chaîne pour vérifier plusieurs variables : 🎜rrreee🎜 En PHP, il n'est pas rare que les administrateurs se fassent passer pour des utilisateurs pour tester sur les systèmes de connexion. Comme ci-dessus, si l'utilisateur ne se fait pas passer pour un autre utilisateur et n'est pas connecté, il deviendra un invité. Si vous ne comprenez toujours pas, continuez à lire pour savoir ce qu'est l'opérateur ternaire et comment l'utiliser. Voyons ensuite comment utiliser l'opérateur ternaire dans le nouveau PHP🎜🎜🎜🎜 ? 🎜🎜🎜🎜L'instruction if normale est la suivante : 🎜rrreee🎜Utilisez l'opérateur ternaire pour simplifier. 🎜rrreee🎜 Plus court, mais plus difficile à comprendre. Cela peut non seulement être utilisé sur la variable $var comme ci-dessus, mais peut également être utilisé sur echo comme ci-dessous pour vérifier si la variable est fausse : 🎜rrreee🎜🎜🎜 Pourquoi vouloir les utiliser ? 🎜🎜🎜🎜Je pense que l'arithmétique ternaire est fascinante. Certains développeurs veulent de la performance, mais l'opérateur ternaire est 🎜 sympa🎜, surtout lorsqu'il est combiné avec d'autres fonctionnalités, comme les derniers échos courts de PHP 5.4.🎜rrreee🎜Un peu hors sujet, dans la 'view /template' (notez le MVC exemple), si vous souhaitez utiliser une logique côté serveur, utiliser l'opérateur ternaire ou d'autres phrases courtes sera le meilleur moyen. "Autres phrases courtes", comme ceci : 🎜rrreee🎜Remarque, personnellement, je n'aime pas les phrases courtes dénuées de sens comme celle-ci. 🎜🎜🎜🎜Quelle est la vitesse de l'opérateur ternaire ? 🎜🎜🎜🎜Les gens adorent la micro-optimisation. Ceci est également fait. Il est donc important de savoir à quel point les opérations ternaires sont plus rapides que les instructions if / else classiques. 🎜🎜De l'article, j'ai appris qu'il est environ 0,5 ms plus rapide. C'est déjà beaucoup plus rapide ! 🎜🎜Attendez, ce n’est pas le cas. Cette conclusion vient de l’exécution répétée de milliers d’opérations sur une seule ligne de code. Alors ne vous inquiétez pas du tout, cela ne sert à rien. 🎜🎜🎜🎜L'opérateur ternaire n'est pas pratique🎜🎜🎜🎜Le code doit :🎜
    🎜Facile à lire🎜🎜Facile à comprendre🎜🎜Facile à modifier🎜🎜🎜Évidemment, cela dépend de la capacité de codage et de la compréhension de ce type de code. Il n'y a pas de problème avec l'exemple simple précédent, mais ce qui suit est 🎜mauvais🎜 : 🎜rrreee🎜La raison est la suivante : 🎜
      🎜L'imbrication ternaire est trop longue🎜🎜Vous pouvez utiliser le switch code> déclaration🎜 🎜Le premier doit être orange🎜🎜🎜🎜🎜Résumé🎜🎜🎜🎜L'arithmétique ternaire est en fait très simple, il n'y a pas lieu d'avoir peur. Ne pensez pas qu'il y ait une 🎜une🎜augmentation de vitesse, il n'y a vraiment aucune différence. À utiliser lorsque vous pouvez rendre le résultat 🎜simple🎜, 🎜beau🎜 et garder toujours le code lisible. N'utilisez pas l'opérateur ternaire sans ternaire. 🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo PHP🎜"🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer