RE: Seemingly weird regex problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm



On 20 January 2005 20:36, Tim Boring wrote:

> On Thu, 2005-01-20 at 14:40, Bret Hughes wrote:
> > On Thu, 2005-01-20 at 12:43, Jason Wong wrote:
> > > On Friday 21 January 2005 02:16, Tim Boring wrote:
> > > 
> > > > It's perfectly legit to use expressions.  Now perhaps there is
> > > > something wrong with the regex I'm trying to use, but using a
> > > > regex in and of itself is legal.
> > > > http://www.php.net/manual/en/control-structures.switch.php 
> > > 
> > > Yes, but comparing those expressions to:
> > > 
> > >   switch ($line)
> > > 
> > > where $line is a string, doesn't make sense. See my other post.
> > > 
> > 
> > Chaching ( sound of light bulb turning on)  I see that in the
> > example in the manual it needs to be compared to true ( a boolean
> > value) 
> > 
> > 
> > switch (true)
> > 
> > rather than switch ($line)
> > 
> > What is not apparent to me is why the first case matches if the preg
> > fails.  Wouldn't line evaluate to true in a boolean context?

Coming a little late to the discussion here, but I don't think anyone's
really cottoned on to the fact that:

   switch ($x):
   {
      case $e1:
         ...
         break;

      case $e2:
         ...
         break;

      ...

   }

is functionally equivalent to:

   if ($x==$e1):
      ...
   elseif($x==$e2):
      ...
   ...
   endif;

(except that the $x expression is evaluated only once, at the start, instead
of multiple times).

So it's important to be able to predict how an == comparison will perform,
but because of the way PHP does automatic type conversion, this isn't always
obvious (and, unfortunately, there's no switch() modifier to force ===
comparisons).  I can't remember all the minute details, but basically it
goes something like this:

    0, 0.0, FALSE, '' and '0' all compare equal to each other.

    if one expression is Boolean, the other is converted to Boolean before
comparison.

    if one expression is a number, the other is converted to a number (using
usual PHP rules, so a string which does not start with a number is converted
to 0).

    if both expressions are string, and both look like a number, both are
converted to numbers and a numeric comparison is performed (so "3"=="3.0",
for instance).

In addition, the tables at http://php.net/types.comparisons may be of help,
particularly table O-2.

Cheers!

Mike

---------------------------------------------------------------------
Mike Ford,  Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Headingley Campus, LEEDS,  LS6 3QS,  United Kingdom
Email: m.ford@xxxxxxxxxxxxxx
Tel: +44 113 283 2600 extn 4730      Fax:  +44 113 283 3211 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux