Statements: Compound Statements
A compound statement allows a set of zero or more statements to be treated syntactically as a single statement, by enclosing them in
a pair of braces ({
and }
). A compound statement is often referred to as a block.
Consider the following:
$i = 10;
while ($i > 0)
echo "\$i = " . $i-- . "\n";
which displays the values from 10 down to 1, each on a new line. We do two things inside the body of the while
: output the text and
decrement $i
. We can achieve the same things by breaking the single echo
statement into two statements, as follows:
$i = 10;
while ($i > 0) {
echo "\$i = " . $i . "\n";
$i--;
}
The body of a while
(as well as for
, foreach
, do
, and if
true and false paths, among other contexts) is required to be a single
statement. So, we must make those two statements a block, as shown. If we do not do that, we have the following:
$i = 10;
while ($i > 0) // infinite loop
echo "\$i = " . $i . "\n";
$i--; // never gets executed!
which results in an infinite loop, because the single-statement body of the while
is the echo
statement, and inside that, the value of $i
never changes! Of course, having the decrement statement be indented to 'show visually' that it's part of the while
body, makes no difference.
The indentation is simply white space, and the compiler ignores that!
It is common to have the bodies of while
(and other) statements be a single statement, in which case, what should our programming style be
with respect to writing explicit braces? If we adopt the style, 'Use braces only when they are needed', we can get into trouble, because during
development and testing, it is often useful to add a debug/trace statement inside such a body, but if the braces aren't already there, we'd have
to add them (probably on the second attempt, after we found we just introduced an infinite loop on the first try).