easy way to execute conditional html / javascript / css / other language code with php if else:
<?php if (condition): ?>
html code to run if condition is true
<?php else: ?>
html code to run if condition is false
<?php endif ?>
if문은 PHP를 포함해서 모든 언어에 있어서 가장 중요한 기능 중 하나이다. 이 제어문으로 각각 다른 코드에 대해 조건적인 수행을 가능케한다. if문의 기능은 C와 비슷하다:
if (expr) statement
표현식에 관한 섹션에서 설명된것처럼
expr은 논리(Boolean)값으로 취급된다.
expr이 TRUE
와 같다면 PHP는
statement를
수행할것이고, FALSE
라면 무시될것이다. 무슨값이 FALSE
인지 알려면
'논리값으로 변환하기'
섹션을 참고한다.
다음 예는 $a가 $b보다 크다면 a는 b보다 크다를 출력할 것이다.
<?php
if ($a > $b)
echo "a는 b보다 크다";
?>
종종 하나 이상의 구문을 조건적으로 수행시켜야 하는 때가 있다. 물론 if절로 각 구문을 감싸줄 필요는 없다. 대신, 구문 그룹안에 몇개의 구문을 그룹화할 수 있다. 예를 들면, 이코드는 $a가 $b보다 크다면 a는 b보다 크다라고 출력할것이고, $a의 값을 $b로 지정하게 될것이다.
<?php
if ($a > $b) {
echo "a는 b보다 크다";
$b = $a;
}
?>
If문은 다른 if문안에 무한정으로 내포될수 있다. 이와 같은 기능은 프로그램의 여러부분을 조건적으로 수행하기 위한 유연성을 제공한다.
easy way to execute conditional html / javascript / css / other language code with php if else:
<?php if (condition): ?>
html code to run if condition is true
<?php else: ?>
html code to run if condition is false
<?php endif ?>
An other way for controls is the ternary operator (see Comparison Operators) that can be used as follows:
<?php
$v = 1;
$r = (1 == $v) ? 'Yes' : 'No'; // $r is set to 'Yes'
$r = (3 == $v) ? 'Yes' : 'No'; // $r is set to 'No'
echo (1 == $v) ? 'Yes' : 'No'; // 'Yes' will be printed
// and since PHP 5.3
$v = 'My Value';
$r = ($v) ?: 'No Value'; // $r is set to 'My Value' because $v is evaluated to TRUE
$v = '';
echo ($v) ?: 'No Value'; // 'No Value' will be printed because $v is evaluated to FALSE
?>
Parentheses can be left out in all examples above.
re: #80305
Again useful for newbies:
if you need to compare a variable with a value, instead of doing
<?php
if ($foo == 3) bar();
?>
do
<?php
if (3 == $foo) bar();
?>
this way, if you forget a =, it will become
<?php
if (3 = $foo) bar();
?>
and PHP will report an error.
You can have 'nested' if statements withing a single if statement, using additional parenthesis.
For example, instead of having:
<?php
if( $a == 1 || $a == 2 ) {
if( $b == 3 || $b == 4 ) {
if( $c == 5 || $ d == 6 ) {
//Do something here.
}
}
}
?>
You could just simply do this:
<?php
if( ($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6) ) {
//do that something here.
}
?>
Hope this helps!
In addition to the traditional syntax for if (condition) action;
I am fond of the ternary operator that does the same thing, but with fewer words and code to type:
(condition ? action_if_true: action_if_false;)
example
(x > y? 'Passed the test' : 'Failed the test')
Any variables defined inside the if block will be available outside the block. Remember that the if doesn't have its own scope.
<?php
$bool = true;
if ($bool) {
$hi = 'Hello to all people!';
}
echo $hi;
?>
It will print 'Hello to all people!'
On the other hand, this will have no output:
<?php
if (false) {
$hi = 'Hello to all people!';
}
echo $hi;
?>
As an added note to the guy below, in such a case, use the !== operator like this.
$nkey = array_search($needle, $haystack);
if ($nkey !== false) { ...
The !== and the === compare the "types". So, with this type of comparision, 0 is not the same as the FALSE returned by the array_search array when it can not find a match. :)
Quoted Text:
===================================
Be careful with stuff like
if ($nkey = array_search($needle, $haystack)) { ...
if the returned key is actually the key 0, then the if won't be executed
===================================
It seems that only numbers can be compared between them but actually an alphabet can be compare too. For example :
<?php
// Number comparison
$a="C";
$b="X";
if ($a<$b)
{
echo $a."is smaller than".$b;
}
// Result : C is smaller than X
?>
You can do IF with this pattern :
<?php
$var = TRUE;
echo $var==TRUE ? 'TRUE' : 'FALSE'; // get TRUE
echo $var==FALSE ? 'TRUE' : 'FALSE'; // get FALSE
?>
This is aimed at PHP beginners but many of us do this Ocasionally...
When writing an if statement that compares two values, remember not to use a single = statement.
eg:
<?php
if ($a = $b)
{
print("something");
}
?>
This will assign $a the value $b and output the statement.
To see if $a is exactly equal to $b (value not type) It should be:
<?php
if ($a == $b)
{
print("something");
}
?>
Simple stuff but it can cause havok deep in classes/functions etc...
You can also check alphabet characters like this
<?php
// Alphabetical Comparison
$a="brian";
$b="zebra";
if ($a < $b){
echo $a." is before ".$b." in the alphabet";
}
else{
echo $a." is after ".$b." in the alphabet";
}
// Result : brian is before zebra in the alphabet
?>
When using if statements without the curly braces, remember than only one statement will be executed as part of that condition. If you want to place multiple statements you must use curly braces, and not just put them on the same line.
<?php
if (1==0) echo "Test 1."; echo "Test 2";
?>
Whereas some people would expect nothing to be displayed, this piece of code will show: "Test 2".
@henryk (and everybody):
You should put your arguments in order by *least* likely to be true. That way if php is going to be able to quit checking, it will happen sooner rather than later, and your script will run (what amounts to unnoticeably) faster.
At least, that makes the most sense to me, but I don't claim omniscience.
This has got the better part of my last 2 hours, so I'm putting it here, maybe it will save someone some time.
I had a
if (function1() && function2())
statement. Before returning true or false, function1() and function2() had to output some text. The trick is that, if function1() returns false, function2() is not called at all. It seems I should have known that, but it slipped my mind.
Re : henryk dot kwak at gmail dot com
<?php function message($m)
{
echo "$m <br />\r";
return true;
}
$k=false;
if (message("first")&& $k && message("second")){;}
// will show
//first
class
$k=true;
if (message("first")&& $k && message("second")){;}
// will show
//first
//second
?>
Note that safe type checking (using === and !== instead of == and !=) is in general somewhat faster. When you're using non-safe type checking and a conversion is really needed for checking, safe type checking is considerably faster.
===================================
Test (100,000,000 runs):
<?php
$start = microtime(true);
for($i = 0; $i < 100000000; $i++)
if(5 == 10) {}
$end = microtime(true);
echo "1: ".($end - $start)."<br />\n";
unset($start, $end);
$start = microtime(true);
for($i = 0; $i < 100000000; $i++)
if('foobar' == 10) {}
$end = microtime(true);
echo "2: ".($end - $start)."<br />\n";
unset($start, $end);
$start = microtime(true);
for($i = 0; $i < 100000000; $i++)
if(5 === 10) {}
$end = microtime(true);
echo "3: ".($end - $start)."<br />\n";
unset($start, $end);
$start = microtime(true);
for($i = 0; $i < 100000000; $i++)
if('foobar' === 10) {}
$end = microtime(true);
echo "4: ".($end - $start)."<br />\n";
unset($start, $end);
?>
===================================
Result (depending on hardware configuration):
1: 16.779544115067
2: 21.305675029755
3: 16.345532178879
4: 15.991420030594
It can be tricky to know what commands are executed if these expressions are stacked, here is an overview, general rule is that only the first statement following a true conditional will be executed.
php > if (true) if (true) if (true) echo "1 "; echo "2 "; echo "3 "; echo "4 ";
1 2 3 4
php > if (true) if (true) if (false) echo "1 "; echo "2 "; echo "3 "; echo "4 ";
2 3 4
php > if (true) if (false) if (false) echo "1 "; echo "2 "; echo "3 "; echo "4 ";
2 3 4
if (false) if (false) if (false) echo "1 "; echo "2 "; echo "3 "; echo "4 ";
2 3 4
$x = 1;
$y = 2;
if ($x != $y)
$x = $x * $y;
else
$x = $x + $y;
//can you guess the answer?
echo $x; #2
'IF' STATEMENT WRONG BEHAVIOR
If assign var to function that returns 0 as integer or 0 as string 'if' statement condition works as false.
Test script:
---------------
//In this script you can see, that set var value to 0 is equal to boolean false
//applied to if statement. There is no diff between integer 0 or string '0'
if($pos = 0){
$pos++;
} else {
$pos = 0;
}
var_dump($pos);
//$pos is not boolean false, so it should do if condition true, but it's not
//to make this work well i use this
$pos = 0;
if($pos !== false){
$pos++;
} else {
$pos = 0;
}
var_dump($pos);
<?php
function b() {
echo 'b';
}
$a = true;
$a && b(); //b
$a = false;
$a && b(); //