It is not the switch's fault.  That is just the way variable's work in PHP.

If you need to know for sure about the type for this, you will need to do
this:

if($match==="ALPHA") {
    echo "hmm.. alpha\n";
} elseif($match==="BETA") {
    echo "hmm.. beta\n";
} elseif($match===0) {
    echo "hmm.. gamma\n";
} elseif($match===TRUE) {
    echo "hmm.. TRUE\n";
} elseif($match===FALSE) {
    echo "hmm.. FALSE\n";
}


Brian Moon
----------------------------------------------------------------------
dealnews.com, Inc.
Makers of dealnews, dealmac
http://dealnews.com/ | http://dealmac.com/


----- Original Message -----
From: "chrism" <[EMAIL PROTECTED]>
To: "Brian Moon" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Sunday, July 01, 2001 11:02 AM
Subject: Re: [PHP-DEV] switch, equality and preg_match


> I wasn't intending to throw blame at preg_match - My main concern is what
> switch is doing - executing the first CASE when the input is either 0 or
> TRUE.
>
> I don't think switch should execute the first CASE whenever a numeric 0 is
> fed into it.
>
> Even TRUE gives me problems.  And with 0 == FALSE, it all seems so messed
up.
>
> Chris
>
> >
> > Here is your culprit:
> >
> >  RETVAL_LONG(matched);
> >
> > The declaration in the docs says the function returns an int.  However,
the
> > text of the doc says that the function returns True or False.
> >
> > Changing your call to:
> >
> > $match = (bool)preg_false(); /* prints alpha always */
> >
> > gives you the results you want.
> >
> > Andrei, you are listed as the author on this file.  What needs to
change?
> > The return type?  That would make the most sense to me.
> >
> > Brian Moon
> > ----------------------------------------------------------------------
> > dealnews.com, Inc.
> > Makers of dealnews, dealmac
> > http://dealnews.com/ | http://dealmac.com/
> >
> >
> > ----- Original Message -----
> > From: "chrism" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Saturday, June 30, 2001 7:02 PM
> > Subject: [PHP-DEV] switch, equality and preg_match
> >
> >
> > > I encountered a problem where the result of a preg_match 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_match 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_match
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" ?
> > >
> > > Chris
> > >
> > > <?
> > >
> > > /* 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";
> > > break;
> > > case "BETA":
> > > echo "hmm.. beta\n";
> > > break;
> > > case 0:
> > > echo "hmm.. gamma\n";
> > > break;
> > > case TRUE:
> > > echo "hmm.. TRUE\n";
> > > break;
> > > case FALSE:
> > > echo "hmm.. FALSE\n";
> > > break;
> > > }
> > >
> > > ?>
> > >
> > > --
> > > 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]
> > >
> > >
> > >
> >
> >
>
>
>


-- 
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