<?php
// Compound booleans expressed as string args in an 'if' statement don't work as expected:
//
// Context:
// 1. I generate an array of counters
// 2. I dynamically generate a compound boolean based on selected counters in the array
// Note: since the real array is sparse, I must use the 'empty' operator
// 3. When I submit the compound boolean as the expression of an 'if' statement,
// the 'if' appears to resolve ONLY the first element of the compound boolean.
// Conclusion: appears to be a short-circuiting issue
$aArray = array(1,0);
// Case 1: 'if' expression passed as string:
$sCondition = "!empty($aArray[0]) && !empty($aArray[1])";
if ($sCondition)
{
echo "1. Conditions met<br />";
}
else
{
echo "1. Conditions not met<br />";
}
// Case 1 output: "1. Conditions met"
// Case 2: same as Case 1, but using catenation operator
if ("".$sCondition."")
{
echo "2. Conditions met<br />";
}
else
{
echo "2. Conditions not met<br />";
}
// Case 2 output: "2. Conditions met"
// Case 3: same 'if' expression but passed in context:
if (!empty($aArray[0]) && !empty($aArray[1]))
{
echo "3. Conditions met<br />";
}
else
{
echo "3. Conditions not met<br />";
}
// Case 3 output: "3. Conditions not met"
// jvm@jvmyers.com
?>
PS: the bug folks say this "does not imply a bug in PHP itself." Sure bugs me!