RE: [PHP] conditional statement problems
| From: | Ford, Mike [LSS] | Date: | Tue, 01 Oct 2002 11:52:47 +0000 |
| Subject: | RE: [PHP] conditional statement problems | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-118352@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Pablo Oliva [mailto:poliva@cox.net]
> Sent: 01 October 2002 08:11
> To: php-general@lists.php.net
> Subject: [PHP] conditional statement problems
>
>
> $title_err = ($adTitle == "") ? 1 : strlen($adTitle) > 50 ? 2 : 0;
>
> Can anyone tell me why this is not evaluating correctly (returning a
> value of 1) when $adTitle is an empty string?
Yes. According to the list at http://uk.php.net/manual/en/language.operators.php,
the ?: operator is left-associative, and of lesser precedence than >, so your expression is
equivalent to the following:
(($adTitle == "") ? 1 : strlen($adTitle) > 50) ? 2 : 0
... and you can probably see why that is giving the wrong answer! You need to use parentheses to
force the order of evaluation you want, thus:
($adTitle == "") ? 1 : (strlen($adTitle) > 50 ? 2 : 0)
(Incidentally, if you've programmed in c or derivatives, this will come as a surprise since in
c ?: is right-associative and would give your desired result without the additional parentheses.)
Cheers!
Mike
---------------------------------------------------------------------
Mike Ford, Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Beckett Park, LEEDS, LS6 3QS, United Kingdom
Email: m.ford@lmu.ac.uk
Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211