Was sind die PHP-Operatoren “?” und “:” angerufen und was machen sie?

Lesezeit: 10 Minuten

Was sind die PHP Operatoren und angerufen und was
seb

Was sind die ? und : Operatoren in PHP?

Zum Beispiel:

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

Was sind die PHP Operatoren und angerufen und was
Chaos

Dies ist das Bedingter Operator.

$x ? $y : $z

bedeutet „wenn $x wahr ist, dann verwenden $y; sonst verwenden $z“.

Es hat auch eine Kurzform.

$x ?: $z

bedeutet „wenn $x wahr ist, dann verwenden $x; sonst verwenden $z“.

Das werden dir die Leute sagen ?: ist “der ternäre Operator”. Das ist falsch. ?: ist ein ternärer Operator, was bedeutet, dass er drei Operanden hat. Die Leute denken am Ende, dass sein Name “der ternäre Operator” ist, weil es oft der einzige ternäre Operator ist, den eine bestimmte Sprache hat.

  • Ich bin nicht anderer Meinung, aber ich habe manchmal das Gefühl, dass die Leute ihren bedingten Operatorhass zu weit treiben. Ich würde sagen, dass ?: immer dann verwendet werden sollte, wenn es den Code sauberer und klarer macht – und dass wir zum Zweck der “Klarheit” davon ausgehen können, dass die Person, die den Code liest, ohne weiteres versteht, was ?: tut.

    – Chaos

    3. Juli 2009 um 17:43 Uhr

  • Ich mag den Bedingungsoperator für return-Anweisungen (wo natürlich eine Bedingung notwendig ist). Ein return-Schlüsselwort, zwei Bedingungen. 🙂

    – Yohnny

    3. Juli 2009 um 17:55 Uhr

  • Natürlich ist „wenn, dann, sonst“ in guten Sprachen ein Ausdruck. 😉

    – Deniz Dogan

    3. Juli 2009 um 18:15 Uhr

  • Ich persönlich liebe Bedingungsausdrücke und finde sie sehr einfach zu lesen. Sobald Sie verstehen, dass sie eine „IF“-Verknüpfung sind, fragen Sie sich, was so schwer an ihnen war. Aber jeder für sich denke ich. :Ö)

    – Gary Willoughby

    18. Juli 2009 um 17:05 Uhr

  • @grossvogel: Nein, aber ob dieses Wort tatsächlich oder potentiell beschreibt unendlich viele andere Dinge, dann ja, das heißt, es kann nicht der Name dafür sein. Und die Tatsache, dass Sie darauf hinweisen, macht Zend noch dümmerda sie jetzt sagen, dass “der ternäre Operator”, wie sie es schwachsinnig nennen, eine Form hat WO ES EIN BINÄRER OPERATOR IST.

    – Chaos

    25. Juli 2010 um 15:26 Uhr

Was sind die PHP Operatoren und angerufen und was
Jimbo

Ich werde ein wenig über Ternäre schreiben, was sie sind, wie man sie benutzt, wann und warum man sie benutzt und wann man sie nicht benutzt.

Was ist ein ternärer Operator?

Ein Dreier ? : ist eine Abkürzung für if und else. Das ist es im Grunde. Siehe “Ternäre Operatoren” auf halbem Weg nach unten diese Seite für mehr von einer offiziellen Erklärung.

Ab PHP 5.3:

Seit PHP 5.3 ist es möglich, den mittleren Teil des ternären Operators wegzulassen. Ausdruck expr1 ?: expr3 gibt expr1 zurück, wenn expr1 TRUE ergibt, andernfalls expr3.

Ab PHP 7.0

PHP 7 hat einen neuen Null Coalesce Operator. Dies ist dasselbe wie ein Ternär, wird aber auch als “isset ternär“. Dies ermöglicht auch eine Reihe von verketteten Ternären, die die Notwendigkeit von isset()-Prüfungen beseitigen.

Wenn Sie in PHP 5 eine ternäre Variable mit einer möglicherweise nicht vorhandenen Variablen verwenden wollten, müssten Sie am Anfang der ternären Anweisung eine isset() ausführen:

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

In PHP 7 können Sie jetzt stattdessen Folgendes tun:

$result = $nonExistentVariable ?? ‘default’;

Der Null-Coalesce-Operator funktioniert jedoch nicht mit einer leeren Zeichenfolge, also denken Sie daran. Das Tolle daran ist, dass Sie die Operatoren auch für mehrere Prüfungen für mehrere Variablen verketten können, was eine Art Backup darstellt, je nachdem, ob jede Variable in der Kette existiert oder nicht:

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

In PHP ist es bei Systemen, bei denen sich ein Benutzer anmelden kann, nicht ungewöhnlich, dass ein Administrator sich zu Testzwecken als ein anderer Benutzer ausgeben kann. Wenn sich der Benutzer im obigen Beispiel nicht als ein anderer Benutzer ausgibt und auch kein angemeldeter Benutzer existiert, dann ist der Benutzer stattdessen ein Gastbenutzer. Lesen Sie weiter, wenn Sie dies noch nicht verstehen, um zu sehen, was Ternaries sind und wie sie verwendet werden, und kehren Sie dann zu diesem Teil zurück, um zu sehen, wie das neue PHP funktioniert

Wie werden Ternäre verwendet?

Hier ist, wie ein normaler if Aussage sieht aus:

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

Lassen Sie uns das zu einem Dreier verkürzen.

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

Viel kürzer, aber vielleicht schwerer zu lesen. Sie werden nicht nur zum Setzen von Variablen wie z $var im vorherigen Beispiel, aber Sie können dies auch mit tun echound um zu prüfen, ob eine Variable falsch ist oder nicht:

$isWinner = false;

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

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

Warum benutzen die Leute sie?

Ich finde Dreier sexy. Manche Entwickler prahlen gerne, aber manchmal auch nur Dreier schön aussehen in deinem Code, insbesondere in Kombination mit anderen Funktionen wie den neuesten kurzen Echos von PHP 5.4.

<?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> 
-->

Gehen Sie leicht vom Thema ab, wenn Sie sich in einer “Ansicht / Vorlage” befinden (wenn Sie Ihre Bedenken durch die MVC Paradigma), möchten Sie so wenig serverseitige Logik wie möglich darin haben. Daher ist die Verwendung von Ternären und anderem Kurzcode manchmal der beste Weg nach vorne. Mit “anderem Kurzcode” meine ich:

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

Beachten Sie, dass ich persönlich diese Art von Kurzschrift nicht mag, wenn / endif Unsinn

Wie schnell ist der ternäre Operator?

Menschen MÖGEN Mikrooptimierungen. Sie tun es einfach. Für einige ist es daher wichtig zu wissen, wie viel schneller Dinge wie Ternäre im Vergleich zu normalen sind if / else Aussagen.

Lektüre dieser Beitrag, die Unterschiede betragen etwa 0,5 ms. Das ist eine Menge!

Oh warte, nein ist es nicht. Es ist nur viel, wenn Sie Tausende und Abertausende davon wiederholt hintereinander machen. Was du nicht sein wirst. Machen Sie sich also überhaupt keine Gedanken über die Geschwindigkeitsoptimierung, es ist hier absolut sinnlos.

Wann man Ternäre nicht verwenden sollte

Ihr Code sollte sein:

  • Leicht zu lesen
  • Einfach zu verstehen
  • Einfach zu ändern

Offensichtlich hängt dies von der Intelligenz und den Programmierkenntnissen / dem allgemeinen Verständnis der Person für solche Konzepte ab, wenn Sie sich Ihren Code ansehen. Ein einzelner einfacher Dreier wie die vorherigen Beispiele sind in Ordnung, so etwas wie der folgende jedoch schon nicht was Sie tun sollten:

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."));

Das war aus drei Gründen sinnlos:

  • Lächerlich lange ternäre Einbettung
  • Hätte einfach ein verwenden können switch Aussage
  • Anfangs war es orange

Fazit

Ternäre sind wirklich einfach und nichts, worüber man sich zu sehr aufregen müsste. Bedenke nicht irgendein Geschwindigkeitsverbesserungen, es wird wirklich keinen Unterschied machen. Verwenden Sie sie, wenn sie es sind einfach und schön aussehen, und stellen Sie immer sicher, dass Ihr Code in Zukunft für andere lesbar ist. Wenn das keine Ternäre bedeutet, dann verwenden Sie keine Ternäre.

  • if/else Aussagen können in manchen Situationen viel schneller sein. Aus dem referenzierten Blogbeitrag ist zu lesen: „Auf meinem Laptop, Snippet 1 [ternary] dauert mehr als zwei Sekunden, während Snippet 2 [if/else] dauert etwa 0,05 ms. Das ist ein großer Unterschied! Aber wenn die zu testende Variable nicht viele Daten enthält, ist die Geschwindigkeit fast gleich.”

    – m13r

    25. Oktober 2017 um 11:30 Uhr


  • @m13r Hast du übersehen: “Es ist nur viel, wenn du Tausende und Abertausende davon wiederholt hintereinander machst.”?

    – Jimbo

    25. Oktober 2017 um 12:13 Uhr

  • Der Unterschied zwischen ternär und if/else (bei riesigen Arrays) beträgt 2 Sekunden und nicht 0,5 ms. Dies wurde mit nur 100 Iterationen bewertet, nicht mit Tausenden. Dies könnte ein weiteres Argument sein, um if/else anstelle von ternary zu verwenden …

    – m13r

    25. Oktober 2017 um 12:23 Uhr


  • Meine war nicht gerade eine wissenschaftliche Erklärung, sie war eher allgemein gehalten. Wenn Sie ein paar weitere Zahlen hinzufügen und die unspezifischen Teile ändern möchten, können Sie sie gerne bearbeiten, und ich akzeptiere die Änderung.

    – Jimbo

    25. Oktober 2017 um 12:33 Uhr

1646925852 978 Was sind die PHP Operatoren und angerufen und was
Johannes T

Es heißt ein ternärer Operator. Wenn der erste Ausdruck wahr ist, HTTPS_SERVER verwendet wird, sonst HTTP_SERVER ist gewählt.

Es ist im Grunde eine Abkürzung if -Anweisung, und der obige Code könnte auch wie folgt umgeschrieben werden:

if ($request_type == 'SSL') {
   HTTPS_SERVER;
}
else {
   HTTP_SERVER;
}

  • Es ist nicht der ternärer Operator, einfach ein ternärer Operator. Ternär bedeutet, dass die Funktion (Operator) drei Argumente akzeptiert.

    – Deniz Dogan

    3. Juli 2009 um 17:31 Uhr

  • Ja, Wikipedia ist in diesem Fall auf meiner Seite. 🙂

    – Deniz Dogan

    3. Juli 2009 um 17:34 Uhr

  • Siehe auch stackoverflow.com/questions/798545/…

    – Chaos

    3. Juli 2009 um 17:36 Uhr

  • @deathlock Dieser Code ist ein Plagiat von Mathews Antwort am 3.7.09 17:32 UTC.

    – Wiedereinsetzung von Monica3167040

    11. September 2017 um 0:35 Uhr

  • Schöner Fund, @Userthatisnotauser! 🙂 Und genau wie dort macht dieser (selbe) Code in dieser Form sowieso keinen Sinn. Übrigens, Mathews Antwort wurde möglicherweise aus diesem Grund auf den Boden abgelehnt. (Das Argument der “funktionalen Äquivalenz” bei Matthew hat in diesem PHP-Kontext keinen Wert, einen Ausdruck mit einem wohldefinierten Wert und Anweisungen zu verwechseln, die nichts bewirken …)

    – Gr.

    12. Oktober 2018 um 16:49 Uhr


1646925852 910 Was sind die PHP Operatoren und angerufen und was
Deniz Dogan

Dies wird manchmal als ternärer Bedingungsoperator bezeichnet. Ternär bedeutet, dass es drei Argumente hat, as x ? y : z. Grundsätzlich wird überprüft, ob x ist wahr; wenn ja, dann setzen y statt dieser Operation, sonst z.

$hello = $something ? "Yes, it's true" : "No, it's false";

Bedingter Operator ? : ist ein Operator, der verwendet wird, um eine Bedingung zu prüfen und einen Wert abhängig vom Wert der Bedingung auszuwählen. Sie drückt sich in folgender Form aus:

variable = condition ? expression1 : expression2;

Es funktioniert wie folgt…

  1. Zuerst, Zustand ausgewertet wird.
  2. Wenn die Zustand stimmt dann Ausdruck1 wird ausgewertet. Und der Wert von Ausdruck1 ist dem zugeordnet Variable.
  3. Wenn die Zustand ist dann falsch Ausdruck2 ausgewertet wird. Und der Wert von Ausdruck2 wird der Variablen zugewiesen.

Zum Beispiel:

x = (a>b) ? 5 : 9

Dabei wird für x zunächst die Bedingung (a>b) ausgewertet. Wenn diese Bedingung wahr wird, wird x der Wert 5 (dh x = 5). Wenn aber die Bedingung (a>b) falsch wird, dann nimmt x den Wert 9 an (dh x=9).

Ternärer Operator

Manchmal Bedingungsoperator ? : wird auch als ternärer Operator bezeichnet. Dies liegt daran, dass es sich um drei Operanden handelt. Zum Beispiel:

x ? y : z

Hier sind x,y und z die drei Operanden. Wenn die Bedingung x wahr ist, wird der Wert y zugewiesen, andernfalls wird der Wert z zugewiesen.

1646925853 764 Was sind die PHP Operatoren und angerufen und was
Peter Mortensen

Dies ist eine kurze Schreibweise if Sätze. Es wird auch in anderen Sprachen wie Java, JavaScript und anderen verwendet.

Dein Code,

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

kann so geschrieben werden:

if ($request_type == 'SSL')
    $protocol = HTTPS_SERVER;
else
    $protocol = HTTP_SERVER;

Was sind die PHP Operatoren und angerufen und was
Chaos

Das ist eine einzeilige if-Anweisung:

condition ? true : false

Übersetzt in eine gewöhnliche if-Anweisung in Ihrem Fall wäre das:

if($request_type == 'SSL') HTTPS_SERVER;
else HTTP_SERVER;

  • Nicht ganz; Der Operator wertet einen Wert aus, was Ihr Code nicht tut.

    – poundifdef

    3. Juli 2009 um 17:34 Uhr

  • Genau. Ich kenne PHP nicht, aber in vielen anderen Sprachen ist “if” eine Anweisung, kein Ausdruck. ?: Gibt einen Ausdruck zurück, keine Anweisung.

    – Deniz Dogan

    3. Juli 2009 um 17:36 Uhr

  • Lesen Sie sein Beispiel noch einmal: Das OP verwirft den Wert des Operators, sodass Ihr Code technisch in Ordnung ist!

    – poundifdef

    3. Juli 2009 um 17:37 Uhr

  • Ok, aber ich glaube, ich habe ihm eine Antwort gegeben, die ihm erklärt hat, was der Satz mit einer Zeile bewirken würde.

    – Yngve Sneen Lindal

    3. Juli 2009 um 17:38 Uhr

988320cookie-checkWas sind die PHP-Operatoren “?” und “:” angerufen und was machen sie?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy