Skrócone operatory warunkowe
Trójoperandowy operator warunkowy (?:)
Pozwala na skrócenie zapisu instrukcji warunkowej.
$score = 50;
if ($score > 40) {
echo ‘high score!’;
} else {
echo ‘low score’;
}
Powyższy zapis możemy skrócić.
$score = 50;
echo $score > 40 ? ‘high score’ : ‘low score’;
Inicjalizacja zmiennej.
$price = isset($_POST[‘price’]) ? $_POST[‘price’] : 0;
UWAGA
Jeżeli zmienna ma wartość null
to konstrukcja językowa isset
zwraca wartość logiczną false
, mimo że zmienna istnieje.
Null Coalescing Operator (??)
Dla PHP >= 7.0 powyższy kod możemy zastąpić kodem wykorzystującym Null Coalescing Operator (??)
.
<input type=“text” name=“title” value=”<?=htmlspecialchars($_POST[‘title’]) ?? ”?>”>
W odróżnieniu od kodu z wykorzystaniem konstrukcji isset()
wartość jest zwracana i ile zmienna istnieje, a jej wartość nie jest równa null
.
Możemy tworzyć łańcuch operacji z wykorzystaniem operatora ??
$username = $_POST[‘username’] ?? $_GET[‘username’] ?? ‘no passed’;
Wartość zmiennej username
będzie równa wartości $_POST[‘username’]
o ile ta zmienna istnieje, a jej wartość jest różna od null
. Wprzeciwnym wypadku zostanie sprawdzona zmienna $_GET[‘username’]
, a jeżeli również ona nie spełnia tych warunków to zmiennej $username
zostanie przypisany ciąg znaków no passed
.
$test2 = null;
$test3 = ‘<script>alert(“test”)</script>’;
echo htmlspecialchars($test ?? $test2 ?? $test3);
W powyższym kodzie zmienna $test
nie istnieje. Zmienna $test2
ma wartość null
. Zmienna $test3
istnieje, a jej wartość jest różna od null
. Zostanie wyświetlona wartość zmiennej $test3
. Ponieważ zastosowano funkcję htmlspecialchars
kod javascript
się nie wykona gdyż znaki zostaną zastąpione encjami
.