Hoe gebruik ik de ternary-operator (? 🙂 in PHP als een steno voor “als / anders”?

Gebaseerd op de voorbeelden van deze pagina , ik heb het werk en niet -working-code monsters hieronder.

Werkcode met ifverklaring:

if (!empty($address['street2'])) echo $address['street2'].'<br />';

Niet-werkcode met Ternary Operator:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

update
Na de tip van Brian, vond ik dat echoing $testgeeft het verwachte resultaat uit. Het volgende werkt als een charme!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';

Antwoord 1, Autoriteit 100%

De

(condition) ? /* value to return if condition is true */ 
            : /* value to return if condition is false */ ;

Syntaxis is geen “SHORTHAND ALS” Operator (de ?wordt de voorwaardelijke operator genoemd) omdat u geen code op dezelfde manier kunt uitvoeren alsof u deed:

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}

In uw voorbeeld voert u de instructie echouit wanneer het $addressniet leeg is. U kunt dit niet op dezelfde manier doen met de voorwaardelijke operator. Wat u echter wel kunt doen, is echohet resultaat van de voorwaardelijke operator:

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];

en dit toont “Straat is leeg!” als het leeg is, wordt anders het straat2-adres weergegeven.


Antwoord 2, autoriteit 19%

PHP 7+

Vanaf PHP 7 kan deze taak eenvoudig worden uitgevoerd door de Null-coalescentie-operatorals volgt:

echo !empty($address['street2']) ?? 'Empty';


Antwoord 3, autoriteit 11%

Basis Waar/Onwaar Verklaring

$is_admin = ($user['permissions'] == 'admin' ? true : false);

Voorwaardelijk welkomstbericht

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

Voorwaardelijke items-bericht

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';

ref: https://davidwalsh.name/php-ternary-examples


Antwoord 4, autoriteit 5%

De ternaire operator is slechts een afkorting voor en if/else-blok. Je werkende code heeft geen else-voorwaarde, dus is hier niet geschikt voor.

Het volgende voorbeeld werkt:

echo empty($address['street2']) ? 'empty' : 'not empty';

Antwoord 5, Autoriteit 5%

Het is de ternaire operator A.K.A Elvis Operator (Google IT: P) waarnaar u op zoek bent.

echo $address['street2'] ?: 'Empty'; 

Het retourneert de waarde van de variabele of standaard als de variabele leeg is.


Antwoord 6, Autoriteit 3%

Snelle en korte manier:

echo $address['street2'] ? : "No";

Hier zijn enkele interessante voorbeelden, met een of meer gevarieerde omstandigheden.

$color = "blue";
// Condition #1 Show color without specifying variable 
echo $color ? : "Undefined";
echo "<br>";
// Condition #2
echo $color ? $color : "Undefined";
echo "<br>";
// Condition #3
echo ($color) ? $color : "Undefined";
echo "<br>";
// Condition #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";
// Condition #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";
// Condition #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";
// Condition #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";

Antwoord 7

Merk op dat bij het gebruik van geneste voorwaardelijke operatoren, u misschien haakjes wilt gebruiken om mogelijke problemen te voorkomen!

Het lijkt erop dat PHP niet op dezelfde manier werkt als tenminste JavaScript of C #.

$score = 15;
$age = 5;
// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));
// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');

Dezelfde code in Javascript en C# retourneert in beide gevallen “Uitzonderlijk”.

In het tweede geval is wat PHP doet (of dat is tenminste wat ik begrijp):

  1. is $score > 10? ja
  2. is $age > 10? nee, dus de huidige $age > 10 ? 'Average' : 'Exceptional'geeft als resultaat ‘Uitzonderlijk’
  3. dan, in plaats van alleen de hele verklaring te stoppen en ‘Uitzonderlijk’ terug te geven, gaat het verder met het evalueren van de volgende verklaring
  4. het volgende statement wordt 'Exceptional' ? 'Horrible' : 'Average'wat ‘Verschrikkelijk’ retourneert, omdat ‘Uitzonderlijk’ waarheidsgetrouw is

Uit de documentatie: http://php.net/manual/en/ taal.operators.comparison.php

Het wordt aanbevolen om ternaire uitdrukkingen niet te “stapelen”. PHP’s
gedrag bij gebruik van meer dan één ternaire operator binnen een enkele
verklaring is niet voor de hand liggend.


Antwoord 8

Voorwaardelijk welkomstbericht

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

Geneste PHP-steno

echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );

Antwoord 9

Je kunt dit nog korter doen door echote vervangen door <?= code ?>

<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>

Dit is vooral handig als u binnen een navigatiebalk wilt bepalen of de menuoptie moet worden weergegeven als al bezocht (aangeklikt) of niet:

<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>


Antwoord 10

indien anders php steno ?

Probeer dit

 ($value == 1) ? "selected" : "";

Antwoord 11

Ik denk dat je de haakjes op de verkeerde manier hebt gebruikt. Probeer dit:

$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

Ik denk dat het zou moeten werken, je kunt ook het volgende gebruiken:

echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

Antwoord 12

Ik denk dat je waarschijnlijk geen ternaire operator in php moet gebruiken.
Overweeg het volgende voorbeeld:

<?php
function f1($n) {
    var_dump("first funct");
    return $n == 1;
}
function f2($n) {
    var_dump("second funct");
    return $n == 2;
}
$foo = 1;
$a = (f1($foo)) ? "uno" : (f2($foo)) ? "dos" : "tres";
print($a);

Hoe denk je dat welke $avariabele zal bevatten? (tip: do’s)
En het blijft hetzelfde, zelfs als de variabele $foowordt toegewezen aan 2.

Om de zaken te verbeteren, moet u ofwel weigeren deze operator te gebruiken of het rechtergedeelte op de volgende manier met accolades omringen:

$a = (f1($foo)) ? "uno" : ((f2($foo)) ? "dos" : "tres");

Antwoord 13

Ternary Operator is eigenlijk een afkorting voor if/else-statement. We kunnen gebruiken om enkele regels code te verminderen en de leesbaarheid te vergroten.

Uw code lijkt mij schoner. Maar we kunnen als volgt een meer schonere manier toevoegen-

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

Een andere manier-

$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');

Opmerking-
Ik heb een haakje toegevoegd aan de hele uitdrukking om het schoner te maken. Vroeger deed ik dit meestal om de leesbaarheid te vergroten.
Met PHP7 kunnen we Null Coalescing Operator / php 7 ?? operatorvoor een betere benadering. Maar uw eis past niet.


Antwoord 14

Als de eerste variabele($a) nullis, wijs dan de waarde van de tweede variabele($b) toe aan de eerste variabele($a)

$a = 5;
 $b = 10;   
 $a != ''?$a: $a = $b;
 echo $a;

Antwoord 15

Ik denk niet dat ik het antwoord in alle bovenstaande oplossingen heb gevonden.
Sommige zijn ook fout.

Om te testen of een variabele (of een element van een array, of een eigenschap van een object) bestaat (en niet null is) gebruik je:
echo isset($address['street2']) ? $address['street2'] : 'Empty';

Om te testen of een variabele (…) niet-lege gegevens bevat, gebruik:
echo !empty($address['street2']) ? $address['street2'] : 'Empty';


Antwoord 16

Er is ook een ternaire steno-operator en die ziet er als volgt uit:

(expression1) ?: expression2 retourneert expression1als het evalueert naar true of expression2anders.

Voorbeeld:

$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';

zal terugkeren

Apples are great!

Sinds PHP 5.3 is het mogelijk om het middelste deel van de . weg te laten
ternaire operator. Expressie expr1 ?: expr3 retourneert expr1 als expr1
evalueert naar TRUE, en anders expr3.

Van de PHP Handmatig

Other episodes