Re: switch, equality and preg_match

From: Date: Mon, 02 Jul 2001 03:25:48 +0000
Subject: Re: switch, equality and preg_match
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-58641@lists.php.net to get a copy of this message
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" <chrism@FOUR.net> To: "Brian Moon" <brianm@dealnews.com> Cc: <php-dev@lists.php.net>; <andrei@ispi.net> 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" <chrism@FOUR.net> > > To: <php-dev@lists.php.net> > > 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: php-dev-unsubscribe@lists.php.net > > > For additional commands, e-mail: php-dev-help@lists.php.net > > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > > > > > > > > > > > > > > >

« previous php.dev (#58641) next »