How can I make this a one or two line shorthand ternary?
if ($tame == null):
echo $tame = '0' . '<br />';
else:
echo $tame . '<br />';
endif;
Looks like the OP is expecting $tame to be an integer value. Why else would he write zero for null?
If this is the case. This is the shortest solution.
echo (int)$tame.'<br/>';
That will echo 0 for null or a numeric value. There is also no reason to set $tame to zero, because PHP treats null and zero the same.
The ternary operator is essentially an if..else
statement in one line.
if (condition) {
action(a);
} else {
action(b);
}
turns into:
action( condition ? a : b );
What you have is:
if ($tame == null) {
echo $tame = '0' . '<br />';
} else {
echo $tame . '<br />';
}
which could be written as:
echo $tame == null ? $tame = '0<br />' : $tame . '<br />';
However, this ternary statement is relatively complex, given that $tame
is being mutated as part of the statement. Code written this way is harder to read, and therefor difficult to debug, which makes it more prone to errors. It would be better overall if you wrote the code in the more verbose form:
if ($tame == null) {
$tame = '0';
}
echo $tame . '<br />';
echo (is_null($tame)) ? '0<br />' : $tame . '<br />';
How about one more way :)
echo $tame . (!is_null($tame)?:'0'). '<br />';
as you can see I omitted the middle part, since php 5.3 you can do it like this
The ternary part is only the part which is needed to be printed you can still do it like this for older php
echo $tame . (is_null($tame)?'0':''). '<br />';
If $tame
is null or an integer, you can skip the logic altogether:
echo sprintf("%d<br />", $tame);
This assumes you didn't mean to assign "0<br />"
to $tame
in the second line, as pointed out by @mellamokb.
` to `$tame` in the first `echo` statement? – mellamokb Jan 19 '13 at 02:19