Heim  >  Artikel  >  Backend-Entwicklung  >  Eingehende Analyse des „? :“-Operators in PHP, um seine Verwendung zu verstehen!

Eingehende Analyse des „? :“-Operators in PHP, um seine Verwendung zu verstehen!

青灯夜游
青灯夜游nach vorne
2021-09-30 19:41:3216349Durchsuche

In diesem Artikel erhalten Sie eine detaillierte Analyse des „?:“-Operators (ternärer Ausdruck) in PHP, um seine Funktion, seine Verwendung und seine Wirkung kennenzulernen. Hoffe, es hilft allen! Wie sehen die Operatoren

? und : in Eingehende Analyse des „? :“-Operators in PHP, um seine Verwendung zu verstehen!

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

如下:

(($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
  • lautet wie folgt:
rrreee

Es ​​ist ein bedingter Operator. rrreee bedeutet „Wenn $x wahr ist, dann verwende $y; wenn nicht, verwende $z“. Es kann auch vereinfacht werden.

rrreee

bedeutet „Wenn $x wahr ist, dann verwende $x; wenn nicht, verwende $z“. Manche Leute würden sagen ?: ist der „ternäre Operator“. Das ist nicht richtig. ?: Wenn es sich um einen ternären Operator handelt, sollte er drei Operanden haben. Der Grund dafür ist, dass es sich im Allgemeinen um den einzigen ternären Operator in aktuellen Sprachen handelt.

Im Folgenden wird erläutert, was Ternär ist, wie man es verwendet, wann man es verwendet, warum man es verwendet und wann man es nicht verwendet.

Was ist der ternäre Operator?

🎜? : ist die Abkürzung von if und else. In der Mitte befindet sich eine offizielle Beschreibung des „ternären Operators“. 🎜🎜🎜Seit PHP 5.3🎜:🎜
🎜Ab PHP 5.3 kann der mittlere Teil des ternären Operators weggelassen werden. Der Ausdruck expr1 ?: expr3 gibt expr1 zurück, wenn expr1 TRUE ist, andernfalls expr3. 🎜
🎜🎜Seit PHP 7.0🎜🎜
🎜PHP 7 verfügt über einen neuen Null-Koaleszenzoperator. Dies ist dasselbe wie der ternäre Operator, auch bekannt als „isset ternärer Operator“. Dadurch wird isset() aus der verketteten ternären Arithmetik entfernt. 🎜
🎜Wenn Sie in PHP 5 den ternären Operator für eine Variable verwenden, die möglicherweise nicht existiert, müssen Sie isset() am Anfang der ternären Anweisung verwenden: 🎜rrreee🎜In PHP 7 können Sie Folgendes tun: 🎜rrreee🎜Denken Sie daran, dass der Null-Koaleszenzoperator keine leeren Zeichenfolgen verarbeiten kann. Sie können es in einer Kette verwenden, um mehrere Variablen zu überprüfen: 🎜rrreee🎜In PHP ist es nicht ungewöhnlich, dass Administratoren sich zum Testen auf Anmeldesystemen als Benutzer ausgeben. Wie oben gilt: Wenn der Benutzer sich nicht als ein anderer Benutzer ausgibt und nicht angemeldet ist, wird er zum Gast. Wenn Sie es immer noch nicht verstehen, lesen Sie weiter, um zu erfahren, was der ternäre Operator ist und wie man ihn verwendet. Schauen wir uns dann an, wie man den ternären Operator im neuen PHP🎜🎜🎜🎜 verwendet. 🎜🎜🎜🎜Die normale if-Anweisung lautet wie folgt: 🎜rrreee🎜Verwenden Sie zur Vereinfachung den ternären Operator. 🎜rrreee🎜 Kürzer, aber schwerer zu verstehen. Dies kann nicht nur wie oben für die Variable $var verwendet werden, sondern auch wie unten für echo, um zu überprüfen, ob die Variable falsch ist: 🎜rrreee🎜🎜🎜 Warum möchten Sie sie verwenden? 🎜🎜🎜🎜Ich finde ternäre Arithmetik faszinierend. Einige Entwickler wollen Leistung, aber der ternäre Operator ist 🎜nett🎜, insbesondere in Kombination mit anderen Funktionen, wie den neuesten kurzen Echos von PHP 5.4.🎜rrreee🎜Ein wenig abseits des Themas, in der „Ansicht/Vorlage“ (beachten Sie die MVC Wenn Sie beispielsweise serverseitige Logik verwenden möchten, ist die Verwendung des ternären Operators oder anderer kurzer Sätze die beste Möglichkeit. „Andere kurze Sätze“, wie dieser: 🎜rrreee🎜Hinweis: Ich persönlich mag bedeutungslose kurze Sätze wie diesen nicht. 🎜🎜🎜🎜Wie schnell ist der ternäre Operator? 🎜🎜🎜🎜Menschen lieben Mikrooptimierung. Dies ist auch erledigt. Daher ist es wichtig zu wissen, wie viel schneller ternäre Operationen sind als normale if / else-Anweisungen. 🎜🎜Aus dem Artikel habe ich gelernt, dass es etwa 0,5 ms schneller ist. Das geht schon viel schneller! 🎜🎜Moment, das ist nicht der Fall. Diese Schlussfolgerung ergibt sich aus der wiederholten Ausführung Tausender Operationen in einer einzigen Codezeile. Machen Sie sich also überhaupt keine Sorgen, es ist sinnlos. Unbrauchbarer ternärer Operator . Problemverständnisfähigkeit. Mit dem vorherigen einfachen Beispiel gibt es kein Problem, aber das Folgende ist 🎜schlecht🎜: 🎜rrreee🎜Der Grund ist wie folgt: 🎜
    🎜Die ternäre Verschachtelung ist zu lang🎜🎜Sie können den Schalter verwenden Code> Aussage🎜 🎜Der erste sollte orange sein🎜🎜🎜🎜🎜Zusammenfassung🎜🎜🎜🎜Ternäre Arithmetik ist eigentlich sehr einfach, es besteht kein Grund zur Angst. Ich glaube nicht, dass es 🎜irgendeine🎜Geschwindigkeitsverbesserungen gibt, es gibt wirklich keinen Unterschied. Verwenden Sie diese Option, wenn Sie das Ergebnis „einfach“ machen, „gut aussehen“ lassen und den Code stets lesbar halten können. Verwenden Sie den ternären Operator nicht ohne einen ternären Operator. 🎜🎜Empfohlenes Lernen: „🎜PHP-Video-Tutorial🎜“🎜

Das obige ist der detaillierte Inhalt vonEingehende Analyse des „? :“-Operators in PHP, um seine Verwendung zu verstehen!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen