Wenn null, verwenden Sie eine andere Variable in einer Zeile in PHP
Lesezeit: 5 Minuten
Rochel
Gibt es in PHP etwas Ähnliches wie JavaScript:
alert(test || 'Hello');
Wenn test also undefiniert oder null ist, sehen wir Hello, andernfalls sehen wir den Wert von test.
Ich habe eine ähnliche Syntax in PHP ausprobiert, aber es scheint nicht richtig zu funktionieren … Außerdem habe ich keine Ahnung, wie ich dieses Problem googeln soll.
Danke
Bearbeiten
Ich sollte wahrscheinlich hinzufügen, dass ich es in einem Array verwenden wollte:
Wenn Sie ein Array mit mehr als 3 Elementen wie diesem erstellen möchten, schauen Sie sich meine Antwort an, um sich viele ternäre Operatoren zu sparen;)
– Felix Klinge
14. Februar 2011 um 23:03 Uhr
Nun, ja, offensichtlich würde ich es in eine Art Hilfsfunktion stecken;) danke
– Rochel
14. Februar 2011 um 23:05 Uhr
Yamiko
Ab PHP 7 können Sie etwas namens a verwenden Koaleszenz-Operator das macht genau das was du willst ohne das E_NOTICE das ?: löst aus.
Um es zu verwenden, verwenden Sie ?? die prüft, ob der Wert auf der linken Seite gesetzt und nicht null ist.
$arr = array($one ?? 'one?', $two ?? 'two?');
Yamiko
du kannst tun echo $test ?: 'hello';
Das wird widerhallen $test wenn es stimmt und 'hello' Andernfalls.
Notiz es wird eine Benachrichtigung oder einen strengen Fehler auslösen, wenn $test ist nicht eingestellt aber…
Dies sollte kein Problem darstellen, da die meisten Server so eingestellt sind, dass sie diese Fehler ignorieren. Die meisten Frameworks haben Code, der diese Fehler auslöst.
Bearbeiten: Dies ist ein Klassiker Ternärer Operator, aber ohne Mittelteil. Verfügbar seit PHP 5.3.
echo $test ? $test : 'hello'; // this is the same
echo $test ?: 'hello'; // as this one
Dies prüft nur, ob die erste Variable wahr ist und nicht, wenn sie nicht definiert ist, und löst in diesem Fall die aus E_NOTICE Error. Für letzteres lesen Sie die PHP7-Antwort unten (hoffentlich bald oben).
Ich stimme zu, aber wichtige Bibliotheken und Plugins für sie lösen sie ständig aus, sodass sie normalerweise in der Produktion ignoriert werden. Auch diese Art von Fehler ist E_NOTICE, was sicher ignoriert werden kann. Ich persönlich mag es nicht, irgendwelche Fehler auszulösen, einschließlich E_NOTICE, aber bei dieser Art von Fehler geht es mehr um Best Practices als um einen tatsächlichen Fehler, der behoben werden muss
– Yamiko
23. März 2015 um 18:14 Uhr
Ich weiß auch, dass vorzeitige Optimierung schlecht ist und alles andere als das Auslösen einer Benachrichtigung dazu führt, dass die Fehlerbehandlungsfunktion (ob die Standard- oder eine benutzerdefinierte PHP-Funktion) aufgerufen wird, selbst wenn diese Funktion den Fehler aufgrund Ihrer error_reporting-Einstellung ignoriert, und das kann langsam sein vor allem, wenn Sie es innerhalb einer Schleife tun.
– Thomas Rutter
6. März 2017 um 4:06 Uhr
Wie heißt dieser ?: Operator? Kann jemand die Dokumente verlinken?
– inafalcao
6. April 2019 um 6:10 Uhr
@inafalcao Es ist klassisch ternärer Operator, aber ohne Mittelteil. Es macht es also zu einem verkürzten ternären Operator. Verfügbar seit PHP 5.3.
– Djboris
16. Juli 2019 um 8:43 Uhr
Nett, davon wusste ich noch nichts. Du könntest sagen ?: ist zu ? wie += ist zu =… irgendwie.
– Agent Freitag
7. Februar 2020 um 20:01 Uhr
Jeff Busby
Siehe die Antwort von @Yamiko unten für eine PHP7-Lösung https://stackoverflow.com/a/29217577/140413
echo (!$test) ? 'hello' : $test;
Oder Sie können etwas robuster sein und dies tun
echo isset($test) ? $test : 'hello';
Warum gegen !$test prüfen und nicht einfach $test durchführen? $test : ‘Hallo’; stattdessen?
– AndrewKS
14. Februar 2011 um 22:55 Uhr
Nun, er sagte, wenn $test undefiniert oder null wäre, wollte er ‘Hallo’ sehen, wenn der Wert von $test int(0) wäre, würde er immer noch hallo sehen, obwohl es gesetzt und nicht null ist, weil PHP 0 als falsch interpretiert, es sei denn, Sie verwenden ===. Nur um sicherzugehen, sollte er überprüfen, ob $test gesetzt und nicht null ist. Das war zumindest meine Logik.
– Jeff Busby
14. Februar 2011 um 23:01 Uhr
Ich verstehe, aber Ihre Auflösung ist sehr verwirrend 🙁 . Es sollte keine akzeptierte Antwort gemäß “If null use other variable in one line in PHP” sein. Die Antwort von @yamiko ist sowohl sehr einfach als auch nützlich
– Santi
12. Oktober 2017 um 13:36 Uhr
Das || is_null() ist hier überflüssig, isset($var) gibt false zurück, wenn $var ist Null
– Arth
23. Februar 2018 um 15:42 Uhr
Verwenden Sie dies gemäß der neuesten Version für die Kurzschrift
$var = $value ?? "secondvalue";
TrophyGeek
Einzeiler. Super lesbar, funktioniert für reguläre Variablen, Arrays und Objekte.
// standard variable string
$result = @$var_str ?: "default";
// missing array element
$result = @$var_arr["missing"] ?: "default";
// missing object member
$result = @$var_obj->missing ?: "default";
Ich bin sehr überrascht, dass dies in den anderen Antworten nicht vorgeschlagen wird:
echo isset($test) ? $test : 'hello';
Aus den Dokumentenisset($var) wird zurückkehren FALSCH wenn $var existiert nicht oder auf null gesetzt ist.
Der Null-Coalesce-Operator ab PHP 7, beschrieben von @Yamiko, ist eine Syntax-Abkürzung für das Obige.
In diesem Fall:
echo $test ?? 'hello';
Wenn Sie auf diese Weise ein Array erstellen möchten, array_map bietet eine kürzere Möglichkeit, dies zu tun (abhängig von der Anzahl der Elemente im Array):
Wenn Sie ein Array mit mehr als 3 Elementen wie diesem erstellen möchten, schauen Sie sich meine Antwort an, um sich viele ternäre Operatoren zu sparen;)
– Felix Klinge
14. Februar 2011 um 23:03 Uhr
Nun, ja, offensichtlich würde ich es in eine Art Hilfsfunktion stecken;) danke
– Rochel
14. Februar 2011 um 23:05 Uhr