downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

elseif/else if> <if
Last updated: Fri, 24 Jul 2009

view this page in

else

가끔은 특정 조건에 맞을때 구문을 수행하지 않고, 조건과 맞지 않을 때 다른 구문을 수행하게 하고 싶은 때가 있다. else 문은 이 목적을 위한 것이다. if문 다음의 else문은 if구문안의 표현식이 FALSE일때 수행된다. 예를 들면, 다음 코드는 $a$b보다 크다면 a는 b보다 크다 를 출력할것이고, 그렇지않다면 a는 b보다 크지 않다를 출력할것이다:

<?php
if ($a $b) {
    echo 
"a는 b보다 크다";
} else {
    echo 
"a는 b보다 크지 않다";
}
?>

else문은 if문이 FALSE일때만 수행이 된다. 그리고 그들 모두 FALSE값이 될수있다면 elseif문 을 쓸수 있다. (elseif를 참고)



elseif/else if> <if
Last updated: Fri, 24 Jul 2009
 
add a note add a note User Contributed Notes
else
Larry H-C
17-Aug-2009 05:08
When you escape out of HTML, you can get an UNEXPECTED T_ELSE error with the following:

Error:

<? if( $condition ) {
       
dosomething;
   }
?>

<? else {
      
dosomethingelse;
   }
?>

Correct:

<? if( $condition ) {
      
dosomething;
?>

<? } else {
      
dosomethingelse;
   }
?>

Apparently the compiler thinks a ?> <? breaks the connection between the } and the else
Theoden
25-Apr-2008 12:42
At Caliban Darklock

I don't know if it is just improvements in the parser, but there is a negligible difference in the performance of "elseif" vs "else if" as of version 5. One thousandth of a second in your example and 8 thousandths if the eval statement is repeated 5 times.
If the constructs are in regular code, then there appears to be no difference. This leads me to believe that the difference in the eval code is from there being an extra parser token.

Also the main performance burden of recursive functions is the stack operations of changing the context. In this case I believe that it would parse to very similar (if not identical) jmp controls.

In summary, use your preference. Readability and maintainability rank far higher on the priority scale.

One Additional note, there appears to be a limit of the number of "else if" statements (perhaps nested statements in general) that php will handle before starting to get screwy. This limit is about 1100. "elseif" is not affected by this.
dormeydo at gmail dot com
12-Apr-2008 11:51
An alternative and very useful syntax is the following one:

statement ? execute if true : execute if false

Ths is very usefull for dynamic outout inside strings, for example:

print('$a is ' . ($a > $b ? 'bigger than' : ($a == $b ? 'equal to' : 'smaler than' )) .  '  $b');

This will print "$a is smaler than $b" is $b is bigger than $a, "$a is bigger than $b" if $a si bigger and "$a is equal to $b" if they are same.
mitch at mitchellbeaumont dot com
24-Jul-2007 07: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.
Caliban Darklock
08-Nov-2004 07: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.

elseif/else if> <if
Last updated: Fri, 24 Jul 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites