Problem opcjonalności nawiasów klamrowych w warunkach w PHP
Mimo że PHP dopuszcza pokazane powyżej skróty z nawiasami klamrowymi, ja generalnie nie polecam tak robić, ponieważ jest to rozsadnik trudnych do wychwycenia błędów.
Załóżmy na przykład, że istnieje następujący kod:
<?php
$test = 3;
if ($test > 0)
echo $test;
?>
Załóżmy teraz, że postanowiliśmy w przypadku, gdy
warunek jest spełniony, zrobić jeszcze drugie
echo:
<?php
$test = 3;
if ($test > 0)
echo $test;
echo '+++';
?>
Jednakże bez nawiasów klamrowych wewnątrz warunku znajduje się tylko pierwsze wywołanie, czyli pierwsze wypisanie będzie uruchamiać się przy spełnionym warunku, a drugie - zawsze.
Faktycznie nasz kod jest równoważny takiemu:
<?php
$test = 3;
if ($test > 0) {
echo $test;
}
echo '+++'; // ten wiersz znalazł się poza warunkiem
?>
A my chcielibyśmy taki kod:
<?php
$test = 3;
if ($test > 0) {
echo $test;
echo '+++'; // ten wiersz jest wewnątrz warunku
}
?>
Właśnie dlatego zaleca się zawsze stosować rozmieszczenie nawiasów klamrowych, aby nie wpadać w tego rodzaju błędy.
Nie uruchamiając kodu, określ, co wyświetli się na ekranie:
<?php
$num = 5;
if ($num === 5)
echo $num;
echo '+++';
?>
Nie uruchamiając kodu, określ, co wyświetli się na ekranie:
<?php
$num = 0;
if ($num === 5)
echo $num;
echo '+++';
?>
Nie uruchamiając kodu, określ, co wyświetli się na ekranie:
<?php
$num = 0;
if ($num === 5)
echo $num;
echo '---';
echo '+++';
?>