CONTROL STRUCTURE -- BOOLEAN REQUIRED
If you are not sure what will work in your IF statements, try DISECTING your variables. Below I've written three (3) empty CLASS DEFINITIONS (Point, Dimension, and Rectangle), and declared an array called $items that holds all the PHP types you can imagine -- booleans, strings, empty strings, integers, floats, null, arrays, empty arrays, and objects too. The rest of the code really chews up the current $item and spits it out for lunch... Try running this code so you can see the HTML TABLE that is created -- it'll be worth your while.
<?php
class Point { }
class Dimension { }
class Rectangle { }
$items = array(true, false, null, 23, 0, -26, 4.21, 0.0, -3.76,
'hello', '', array(1, 2, 3), array('', '', ''), array(),
new stdClass(), new Point(), new Dimension(), new Rectangle());
echo '<table cellpadding="4" border="1">
<tr>
<th>syntax</th>
<th>value</th>
<th>type</th>
<th>empty</th>
<th>boolean</th>
</tr>' . "\n";
foreach($items AS $item)
{
$booleanValue = (boolean)$item;
$empty = (empty($item) ? 'EMPTY' : ' ');
$type = gettype($item);
$syntax = 'if((boolean)';
$val;
if($type == boolean)
{
$val = ($booleanValue ? 'true' : 'false');
$syntax .= ($val . ')');
}
else if($type == 'NULL')
{
$val = 'null';
$syntax .= 'null)';
}
else if($type == double && !$booleanValue)
{
$val = '0.0';
$syntax .= '0.0)';
}
else if($type == string)
{
$val = '\'' . $item . '\'';
$syntax .= ($val . ')');
}
else if($type == 'array')
{
$val = $item;
$syntax .= '$array)';
}
else if($type == 'object')
{
$val = get_class($item);
$syntax .= ('$' . strtolower($val) . ')');
}
else
{
$val = $item;
$syntax .= ($val . ')');
}
echo ' <tr style="color: ' . ($booleanValue ? '#006600' : '#880000') . ';">
<td><code>' . $syntax . '</code></td>
<td>' . $val . '</td>
<td>' . $type . '</td>
<td>' . $empty . '</td>
<td>' . ($booleanValue ? 'TRUE' : 'FALSE') . '</td>
</tr>' . "\n";
}
echo '</table>' . "\n";
?>
Looking at the HTML output: notice that even integers and floats with a value of zero are considered EMPTY, and all that are EMPTY are FALSE boolean values. And take a gander at the boolean type with a false value... somebody is covering there bases!