Web студия "GrandView"
  Главная   Написать Контакты
   
   
О проекте
Руководство php
 

else

Often you'd want to execute a statement if a certain condition is met, and a different statement if the condition is not met. This is what else is for. else extends an if statement to execute a statement in case the expression in the if statement evaluates to FALSE. For example, the following code would display a is bigger than b if $a is bigger than $b, and a is NOT bigger than b otherwise:

<?php
if ($a > $b) {
    echo
"a is bigger than b";
} else {
    echo
"a is NOT bigger than b";
}
?>

The else statement is only executed if the if expression evaluated to FALSE, and if there were any elseif expressions - only if they evaluated to FALSE as well (see elseif).



elseif> <Control Structures
Last updated: Sat, 27 Jan 2007
 
add a note add a note User Contributed Notes
else
ravi dot goglobium at gmail dot com
05-Sep-2007 09:49
another good example of using ternary operator is
<?php
$a
= 20;
$b = 30;
$c = 70;
echo (
$a > $b && $a > $c) ? $a : ($b > $a && $b > $c) ? $b : $c;
?>
mitch at mitchellbeaumont dot com
24-Jul-2007 12:09
At gwmpro at yahoo dot com

The curly brace is not required however, for readability and maintenance, many developers would consider it bad style not to include them.
robbak
21-Jun-2007 12:54
Yes, that code is clearly ambiguous. I would think that the code does the 'right thing' with it anyway. The else should bind to the nearest if.

If you are going to nest ifs, use curly brackets and stay sane.
<?
if ($a == 1)
{ /* nested if */
 if ($b == 2) echo '2';
} else
 /* other code */
?>
jsimlo
15-Aug-2006 07:30
This generates a parser error:

<?
if ($a == 1):
 /* nested if */
 if ($b == 2) echo '2';
else:
 /* other code */
endif;
?>

The nested "if" binds the outer "else" and the colon then generates a parser error.

As this "bug" is not going to be fixed (see http://bugs.php.net/bug.php?id=838), this could be an artful solution to this problem:

<?
if ($a == 1):
 /* nested if */
 if ($b == 2) echo '2';
 /* dummy expression */
 ;
else:
 /* other code */
endif;
?>
gwmpro at yahoo dot com
04-May-2006 08:00
I am new to this language. It seems to me that only the semicolon ';' is required, the brackets '{}' are not if there is only one statement. The code segment below would be legal.

<?php
if ($a > $b)
   echo
"a is bigger than b";
else
   echo
"a is NOT bigger than b";

?>
Caliban Darklock
08-Nov-2004 11:24
If you're coming from another language that does not have the "elseif" construct (e.g. C++), it's important to recognise that "else if" is a nested language construct and "elseif" is a linear language construct; they may be compared in performance to a recursive loop as opposed to an iterative loop.

<?php
$limit
=1000;
for(
$idx=0;$idx<$limit;$idx++) 
{
$list[]="if(false) echo \"$idx;\n\"; else"; }
$list[]=" echo \"$idx\n\";";
$space=implode(" ",$list);| // if ... else if ... else
$nospace=implode("",$list); // if ... elseif ... else
$start=array_sum(explode(" ",microtime()));
eval(
$space);
$end=array_sum(explode(" ",microtime()));
echo
$end-$start . " seconds\n";
$start=array_sum(explode(" ",microtime()));
eval(
$nospace);
$end=array_sum(explode(" ",microtime()));
echo
$end-$start . " seconds\n";
?>

This test should show that "elseif" executes in roughly two-thirds the time of "else if". (Increasing $limit will also eventually cause a parser stack overflow error, but the level where this happens is ridiculous in real world terms. Nobody normally nests if() blocks to more than a thousand levels unless they're trying to break things, which is a whole different problem.)

There is still a need for "else if", as you may have additional code to be executed unconditionally at some rung of the ladder; an "else if" construction allows this unconditional code to be elegantly inserted before or after the entire rest of the process. Consider the following elseif() ladder:

<?php
if($a) { conditional1(); }
elseif(
$b) { conditional2(); }
elseif(
$c) { conditional3(); }
elseif(
$d) { conditional4(); }
elseif(
$e) { conditional5(); }
elseif(
$f) { conditional6(); }
elseif(
$g) { conditional7(); }
elseif(
$h) { conditional8(); }
else {
conditional9(); }
?>

To insert unconditional preprocessing code for $e onward, one need only split the "elseif":

<?php
if($a) { conditional1(); }
elseif(
$b) { conditional2(); }
elseif(
$c) { conditional3(); }
elseif(
$d) { conditional4(); }
else {
....
unconditional();
....if(
$e) { conditional5(); }
....elseif(
$f) { conditional6(); }
....elseif(
$g) { conditional7(); }
....elseif(
$h) { conditional8(); }
....else {
conditional9(); }
}
?>

The alternative is to duplicate the unconditional code throughout the construct.
cap at capsi dot com
05-Oct-2000 10:58
Often you can avoid large if/else statements in your code by using the ternary operator. For example:

<?php
echo "You have $i ". ($i==1 ? "message" : "messages"). " in your mailbox.\n";
?>

elseif> <Control Structures
Last updated: Sat, 27 Jan 2007
 
 
Новости
11 июля 2007
Сайт запущен
© 2007 info@grandviewstudio.com
Z058440144362 Z348613067571