Ich liebe es, so etwas in Perl $foo = $bar || $baz
zu tun: zuzuweisen $baz
, $foo
ob $bar
es leer oder undefiniert ist. Sie haben auch $foo ||= $bletch
welche nur zuweisen $bletch
, $foo
wenn $foo
nicht definiert oder leer ist.
Der ternäre Bediener ist in dieser Situation mühsam und ermüdend. Sicherlich gibt es in PHP eine einfache, elegante Methode?
Oder ist die einzige Antwort eine benutzerdefinierte Funktion, die isset () verwendet?
php
perl
operators
default-value
Tom Auger
quelle
quelle
//
und//=
und sie existieren ab Perl v5.10.0. Das Original||
und der||=
Test auf logischen Wert, nicht auf Definiertheit.Antworten:
In PHP 7 haben wir endlich die Möglichkeit, dies elegant zu tun. Es wird als Null-Koaleszenzoperator bezeichnet . Sie können es so verwenden:
Dies entspricht
quelle
<=>
und ziemlich genau zu booten!null
Wert spezifisch ist. Wenn zum Beispiel$_GET['name']
eine leere Zeichenfolge festgelegt ist, würde die erste Zeile eine leere Zeichenfolge zurückgeben, aber wir könnten "john doe" mit verwenden$_GET['name'] ? $_GET['name'] : 'john doe'
.PHP 5.3 hat einen Kurzoperator
?:
:Was zugewiesen wird,
$bar
wenn es kein leerer Wert ist (ich weiß nicht, wie sich dies in PHP von Perl unterscheiden würde), andernfalls$baz
und dasselbe wie in Perl und älteren Versionen von PHP:PHP verfügt jedoch nicht über einen zusammengesetzten Zuweisungsoperator (dh kein Äquivalent zu Perl
||=
).Außerdem macht PHP Rauschen, wenn
$bar
es nicht eingestellt ist, es sei denn, Sie schalten Benachrichtigungen aus. Es gibt auch einen semantischen Unterschied zwischenisset()
undempty()
. Ersteres gibt false zurück, wenn die Variable nicht vorhanden ist oder auf gesetzt istNULL
. Letztere gibt true zurück , wenn es nicht existiert, oder ist auf0
,''
,false
oderNULL
.quelle
The first returns
stattThe second
in deinem vorletzten Satz.$var = isset($var) ? $var : 'default value';
Es heißt, dass in der Antwort ... nur noch einmal darauf hingewiesen wird für jeden, der es überfliegt. :-DDanke für all die tollen Antworten!
Für alle anderen, die wegen einer möglichen Alternative hierher kommen, sind hier einige Funktionen, die helfen, die Langeweile aus solchen Dingen herauszuholen.
Beispiele:
Ich bin sicher, dass diese verbessert werden können.
quelle
Eine gängige Redewendung, um mit älteren PHP-Versionen kompatibel zu bleiben, ist:
Dies funktioniert für Werte, die im booleschen Kontext ausgewertet werden können. Der Vorteil hierbei ist, dass Sie auch das Debugging e_notice erhalten, falls die Variable undefiniert ist.
quelle
$bool ? $bool : "default"
wenn sie$bool
nicht definiert ist?isset($var) ? $var : DEFAULT
. Aber es hört sich so an, als würde er sie trotzdem meiden wollen.In PHP vor 7. * kann man ?: Für eine undefinierte Variable verwenden, deren Fehler lokal unterdrückt werden mit
@
:quelle
Dies ist ein weiteres gutes Format für den
isset
Fallisset($foo) || $foo= $bar;
Ein weiterer einfacher Weg, der Ihnen mehr Kontrolle gibt, da Sie gleichzeitig weitere Bedingungen hinzufügen und einer anderen Variablen zuweisen können
$foo = (isset($oData['foo']))?$bar['foo']:'default value';
quelle
Eine mögliche Lösung: defaultFor ()
Sofern wir keine Werkslösung haben (was in der Tat sehr ärgerlich ist), würde ich den folgenden kleinen Helfer empfehlen. Es macht den Job in den meisten Fällen:
Ich hoffe, das kommt dem nahe, was Sie erreichen wollten. Es gibt Ihnen keine Hinweise, wenn Sie es mit einer nicht vorhandenen Variablen verwenden, und es ist sehr praktisch. Sicherlich hat es einen Nachteil: Der Standardwert wird immer im Voraus berechnet. Verwenden Sie ihn daher nicht mit etwas Schwerem als zweitem Parameter, wie z. B. einem file_get_contents oder etwas anderem. In diesen Fällen sind Sie mit der Ausgabe besser dran.
quelle