I encountered a problem where the result of a preg_replace was FALSE.
This was fed into a switch statement - and I believe PHP executed the
the wrong case section.

I've tracked this down to preg_replace not really returning FALSE
combined with SWITCH executing the first case statement always on either
a numeric 0 or BOOLEAN TRUE.

As a consequence of auto type conversion, you can't mix
STRING/NUMERIC/BOOLEAN within a switch.  And with the preg_replace issue,
you can't assume all input into your switch will be of one TYPE (BOOLEAN).

Aside from changing functions to return real booleans....

1. Should type conversion be turned off inside switch() ?
2. If 0 == FALSE then why 0 == "ANYTHING" ?



/* auto type conversion is the root of my switch problem */

if (0 == "ONE") echo "one\n";                           /* TRUE */
if (1 == "TWO") echo "two\n";                           /* FALSE */
if (TRUE == "THREE") echo "three\n";            /* TRUE */
if (FALSE == "FOUR") echo "four\n";                     /* FALSE */

if (TRUE == 0) echo "hopefully not\n";

function preg_false() {
        return(preg_match("/no/", "dXiuehXX"));

/* note the difference between FALSE and preg_false() */

// $match = TRUE;               /* prints alpha always */
// $match = 0;                  /* prints alpha always */
// $match = FALSE;              /* prints gamma section */
$match = preg_false();  /* prints alpha always */

if(is_bool($match) == TRUE)  echo "match is boolean\n";

switch($match) {
        case "ALPHA":
                echo "hmm.. alpha\n";
        case "BETA":
                echo "hmm.. beta\n";
        case 0:
                echo "hmm.. gamma\n";
        case TRUE:
                echo "hmm.. TRUE\n";
        case FALSE:
                echo "hmm.. FALSE\n";


PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to