Gibt es in PHP etwas Ähnliches wie in JavaScript:
alert(test || 'Hello');
Wenn der Test undefiniert oder null ist, wird Hallo angezeigt, andernfalls wird der Wert von test angezeigt.
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.
Vielen Dank
Bearbeiten
Ich sollte wahrscheinlich hinzufügen, dass ich es in einem Array verwenden wollte:
$arr = array($one || 'one?', $two || 'two?'); //This is wrong
Aber in der Tat kann ich die Inline verwenden? : 'if Aussage auch hier, danke.
$arr = array(is_null($one) ? "one?" : $one, is_null($two) ? "two ?" : $two); //OK
Antworten:
In der Antwort von @ Yamiko unten finden Sie eine PHP7-Lösung unter 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';
quelle
|| is_null()
ist hier redundant,isset($var)
gibt false zurück, wenn$var
es null istdu kannst tun
echo $test ?: 'hello';
Dies wird wiedergegeben,
$test
wenn es wahr ist und'hello'
anders.Beachten Sie, dass ein Hinweis oder ein strikter Fehler ausgegeben
$test
wird, wenn nicht festgelegt, aber ...Dies sollte kein Problem sein, da die meisten Server diese Fehler ignorieren. Die meisten Frameworks verfügen über Code, der diese Fehler auslöst.
Bearbeiten: Dies ist ein klassischer ternärer Operator , bei dem jedoch der mittlere Teil weggelassen wurde. Verfügbar seit PHP 5.3.
echo $test ? $test : 'hello'; // this is the same echo $test ?: 'hello'; // as this one
Dies prüft nur die Richtigkeit der ersten Variablen und nicht, wenn sie undefiniert ist. In diesem Fall wird der
E_NOTICE
Fehler ausgelöst. Überprüfen Sie für letzteres die PHP7-Antwort unten (hoffentlich bald oben).quelle
?:
ist so?
wie es+=
ist=
... irgendwie.Ab PHP 7 können Sie einen sogenannten Koaleszenzoperator verwenden, der genau das tut, was Sie wollen, ohne die E_NOTICE, die ausgelöst wird
?:
.Um es zu verwenden, verwenden Sie, um zu
??
überprüfen, ob der Wert links gesetzt und nicht null ist.$arr = array($one ?? 'one?', $two ?? 'two?');
quelle
Ich bin sehr überrascht, dass dies in den anderen Antworten nicht vorgeschlagen wird:
echo isset($test) ? $test : 'hello';
Von den Dokumenten
isset($var)
wird false zurückgegeben, wenn$var
es nicht existiert oder auf null gesetzt ist .Der von @Yamiko beschriebene Null-Koaleszenz-Operator ab PHP 7 ist eine Syntaxverknüpfung für die oben genannten.
In diesem Fall:
echo $test ?? 'hello';
quelle
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";
Sehen Sie es in Aktion: Php Sandbox Demo
quelle
Verwenden Sie dies gemäß der neuesten Version für die Kurzform
$var = $value ?? "secondvalue";
quelle
Wenn Sie auf diese Weise ein Array erstellen möchten,
array_map
bietet dies eine präzisere Möglichkeit (abhängig von der Anzahl der Elemente im Array):function defined_map($value, $default) { return (!isset($value) || is_null($value)) ? $default : $value; // or return $value ? $default : $value; } $values = array($one, $two); $defaults = array('one', 'two'); $values = array_map('defined_map', $values, $defaults);
Stellen Sie einfach sicher, dass Sie wissen, welche Elemente bewertet werden,
false
damit Sie den richtigen Test anwenden können.quelle
Es mag einen besseren Weg geben, aber dies ist das erste, was mir in den Sinn kam:
echo (!$test) ? "Hello" : $test;
quelle
Null ist in PHP falsch, daher können Sie ternär verwenden:
alert($test ? $test : 'Hello');
Bearbeiten:
Dies gilt auch für eine leere Zeichenfolge,
da ternary die Gleichheit '===' anstelle von '==' verwendet.Eine leere oder Nullzeichenfolge ist falsch, unabhängig davon, ob der Operator '===' oder '==' verwendet wird. Ich sollte wirklich zuerst meine Antworten testen.
quelle
Wenn Sie die von Ihnen angegebene Notation erweitern, haben Sie Folgendes:
if (test) { alert(test); } else { alert('Hello'); }
Es ist also nur ein einfaches if ... else-Konstrukt. In PHP können Sie einfach verkürzen, wenn ... sonst als so genannter 'ternärer Ausdruck' konstruiert wird:
alert($test ? $test : 'Hello');
Offensichtlich gibt es
alert
in PHP kein Äquivalent zur JS- Funktion, aber das Konstrukt ist dasselbe.quelle
alert((test == null || test == undefined)?'hello':test);
quelle
Ich hatte kürzlich das gleiche Problem. So habe ich es gelöst:
<?php if (empty($row['test'])) { echo "Not Provided";} else { echo $row['test'];}?></h5></span></span> </div>
Ihr Wert in der Datenbank befindet sich in der Variablen $ test. Wenn also die Zeile $ test leer ist, wird das Echo Nicht bereitgestellt
quelle