开发者

Programmimg Logic

开发者 https://www.devze.com 2023-02-23 02:16 出处:网络
Am new to the world of coding and have difficulty is understanding the logic below. Appreciate it if someone could explain it to me. Let me start off with If statements.

Am new to the world of coding and have difficulty is understanding the logic below. Appreciate it if someone could explain it to me. Let me start off with If statements.

/* Sample Code */

if($username == "123") {
//some code here;
}

if ($username == "abc") {
//some code here;
}

My understanding is that IF the first statement fails, progress to the second statement i.e. if $username does not equal to 123 then test whether it is abc. Is that correct?

Now, let me expand on that same code with else statements

/* Sample Code */

if($username == "123") {
//some code here;
}

if ($username == "abc") {
//some code here;
}

else {
//some code here;
}

My understanding is that IF the first staement FAILS i.e. $username does not equal to 123 then test the second statement. IF t开发者_如何学Gohe second statement fails i.e. $username does not equal to abc then proceed to ELSE which is a catchall should all preceding IF statements FAIL. Is that correct?

Let me expand on that again using ELSE IF statements

/* Sample Code */

if($username == "123") {
//some code here;
}

else if ($username == "abc") {
//some code here;
}

else {
//some code here;
}

How is this code different from 2 separate if statements? What does ELSE do in the entire block of code?


the difference between:

if() {

}
else if() {

}

and

if() {

}
if() {

}

is that the second condition in the second example is always tested, regardless of the first if condition. In the first example, the second clause only executes if the first clause is false.


In your example, since "123" is never equal to "abc", they are equivalent. In real life, the ifs don't need to be related:

if (a) {
  // Do something
} else if (b) {
  // Do something else
} else {
  // Do something else
}

is different from

if (a) {
  // Do something
}
if (b) {
  // Do something else
} else {
  // Do something else
}

In the second case, both a and b might be true, in which case both lines will fire. In the first case, only the first line will fire, since the else will never even be read.


In this case they are the same:

if($username == "123") {
//some code here;
}

if ($username == "abc") {
//some code here;
}

against

if($username == "123") {
//some code here;
}

else if ($username == "abc") {
//some code here;
}

The difference is that with else if if the first case is true the second case will never fire.

e.g.

if($username == "123") {
//some code here;
    $username = "abc"
}

if ($username == "abc") {
//some code here;
}

Both code if statement code blocks will be executed where as in:

if($username == "123") {
//some code here;
    $username = "abc"
}

else if ($username == "abc") {
//some code here;
}

only the first if statement code block will be executed.


You aren't right, here's how it works:

if($something == "something")
{
//code
}
if($something == "somethingelse")
{
//code
}

Both of the above will be tested regardless of what $something equals, because they are two separate if statements. So if you were to do:

$something = "something";
if($something == "something")
{
     echo $something;
}
$something = "somethingelse";
if($something == "somethingelse")
{
    echo $something;
}

then the output would be "somethingsomethingelse" because both are tested. Note that in an if/elseif/else structure, it would be a syntax error to put a line of code between the ending of one block and the beginning of another.

if($something == "something")
{
//code
}
else
{
//code
}

In this, the first statement will be tested, if it is true, then it will run through that code. If false, then the code in the else block will occur.

if($something == "something")
{
//code
}
elseif($something == "somethingelse")
{
//code
}
else
{
//code
}

In this it would check the first if statement, if true, then that code runs. If false, it checks the elseif statement, if true it runs that. If false it runs the else block. The else block is a catch all.

So in something like:

if(false)
{
//code
}
elseif(false)
{
//code
}
else
{
//code
}

the else block will always be run.

The same sort of thing occurs in multiconditional statements such as:

if(is_string($something) && $something == "something")

if is_string($something) is false, it won't check the second condition because they both must be true when AND is used, and if is_string($something) is true and $something == "something" is false, then the entire if condition is false, yet again because they both must be true.

if($something == "something" || $something == "somethingelse")

In this OR statement, it will check both if the first is false, because one or the other must be true in order for the if statement to be true. So if $something does equal "somethingelse" then the if statement will be considered true. However, if $something does equal "something" then the second condition won't be checked, because it already got the true condition it needs to make the statement true.

So an && condition in an if condition is like doing:

if(is_string($something))
{
     if($something == "something")
     {
     //code
     }
}

and and || statement is like doing:

if($something == "something")
{
    //code
}
elseif($something == "somethingelse")
{
   //same code as previous if statement
}

Here is an example:

//this would be pulled from a page called like:
//http://www.domain.com/page.php?num=5&num2=10
$num = $_GET['num'];  //5
$num2 = $_GET['num2'];  //10

if(!is_numeric($num))
{
    echo 'Number 1 is not a number, cannot continue <br />';
}
elseif(!is_numeric($num2))
{
    echo 'Number 2 is not a number, cannot continue <br />';
}
else
{
     if($num > $num2)
     {
         echo 'Number 1 is bigger than Number 2 <br />';
     }
     elseif($num2 > $num)
     {
         echo 'Number 2 is bigger than Number 1 <br />';
     }
     else
     {
         echo 'Numbers are equal <br />';  
         //Since if the numbers are neither greater than or less than each other, they must be equal to one another
     }//end if

     //% is the modulo operator, basically returns the remainder of division
     //so !($num % $num2) is if the remainder of $num / $num2 == 0, I.E. NOT(!) $num % $num2
     //! basically makes it take the opposite of the result, so !(0) is true, and 0 is false
     //in the same way !(true) is literally NOT true (in other words false) 
     //and !(false) is literally NOT false (true) 
     if(!($num % $num2))  
     {
         echo 'Number 1 is a multiple of Number 2 <br />';
     }
     else
     {
         echo 'Number 1 is not a multiple of Number 2 <br />';
     }//end if

     if(!($num2 % $num))
     {
         echo 'Number 2 is a multiple of Number 1 <br />';
     }
     else
     {
         echo 'Number 2 is not a multiple of Number 1 <br />';
     }//end if

     echo 'The sum of the numbers is ' . $num + $num2;

}//end if

So, with this, and an input of num=5&num2=10, the output would be

Number 2 is bigger than Number 1
Number 1 is not a multiple of Number 2
Number 2 is a multiple of Number 1  //Note that both of the multiple conditions were tested, because they are separate
The sum of the numbers is 15

With this an an input of num=16&num2=3, the output would be:

Number 1 is bigger than Number 2
Number 1 is not a multiple of Number 2
Number 2 is not a multiple of Number 1
The sum of the numbers is 19

and with an input of num=16&num2=word, the only output would be

Number 2 is not a number, cannot continue

and with an input of num=4&num2=4 the output would be

Numbers are equal
Number 1 is a multiple of Number 2
Number 2 is a multiple of Number 1
The sum of the numbers is 8


My understanding is that IF the first statement fails, progress to the second statement i.e. if $username does not equal to 123 then test whether it is abc. Is that correct?

This isn't correct. Both expressions will be evaluated; however, at most one of them can be true. Your third example behaves the way you describe above.

In your second example, if $username == "123", then the block associated with the first if statement will execute; however, the "else" block associated with the second if statement will also execute.


In the first example, both "if" statements are executed. If both are true, both happen.

In your case, both can't be true, but that's no reason not to use "else". If nothing else [no pun intended], "else" will provide a semantic hint for future programmers that you're only expecting one of the two clauses to be true.

The only way for your statement:

IF the first statement fails, progress to the second statement

to be true is if the second statement was indeed in an "else" clause of the first statement.


Only in the last snippet does the code behave as you describe. When you have an if followed by a second if, both tests are performed. There is no symbiosis or relation in the code flow.


if(X1){
    A;
}elseif(X2){
    B;
}elseif(X3){
    C;
}else{
    D;
}

this means: if X1 evaulates to true then do A. If not look if X2 evaluates to true. if yes do B. if not look if X3 evaluates to true. if so do C. if not then just do D.

if(X1){
    A;
}


if(X2){
    B;
}

this means: if X1 evaluates to true do A. end of your first if. then another if comes: if X2 evaluates to true then do B. these two if statements are separated from eachother unlike my first example.

the alternative if syntax in php makes it a bit clearer:

My first example in alternative syntax:

if(X1):
    A;
elseif(X2):
    B;
elseif(X3):
    C;
else:
    D;
endif;

my second example:

if(X1):
    A;
endif;


if(X2):
    B;
endif;

here you see clearly that these two if statements are separated from eachother.

0

精彩评论

暂无评论...
验证码 换一张
取 消