2008-12-19 38 views
22

我刚刚浏览论坛,有人问他们在网上找到的PHP文件。它有几个斑点像这样的代码:PHP条件,括号需要吗?

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);

我一直认为需要括号括你想要做的,如果条件为真东西。有没有其他的选择,例如,如果它不在同一条线上?

还有另一条线路是这样的: if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",

我的直觉是说这是行不通的,但我也不知道,如果它是一个过时的PHP文件,并将其用于工作?

回答

55

你可以做,如果else语句是这样的:

<?php 
if ($something) { 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
} 


if ($something) echo 'one conditional line of code'; 

if ($something) 
echo 'one conditional line of code'; 
echo 'a NON-conditional line of code'; // this line gets executed regardless of the value of $something 
?> 



,然后你也可以写,如果 - 否则在一个替代语法:

<?php 
if ($something): 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
elseif ($somethingElse): 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
else: 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
endif; 
?> 



与备用语法你也可以脱离这样的解析模式:

<?php 
if ($something): 
?> 
one conditional line of code<br /> 
another conditional line of code 
<?php 
else: 
    echo "it's value was: $value<br />\n"; 
?> 
another conditional line of code 
<?php 
endif; 
?> 

但这真的很麻烦,我不会推荐它的使用(除了可能用于模板逻辑)。



,并使其完成:

<?php 
$result = $something ? 'something was true' : 'something was false'; 
echo $result; 
?> 

equals 

<?php 
if ($something) { 
    $result = 'something was true'; 
} else { 
    $result = 'something was false'; 
} 
echo $result; 
?> 
+2

哇,我不知道有这么多的选项来构建php代码。谢谢! – Levi 2008-12-19 15:37:18

+2

如果你是最后一个例子,你不需要额外的变量:echo $ something? '某事是真的':'某事是错误的'; – 2008-12-19 15:40:23

+0

我知道它的工作原理,但我认为我在某处读到这是一个未记录的结果(因此可能会在将来的版本中更改)。但不知道。 – Jacco 2008-12-19 15:46:23

1

括号(括号不)是可选的PHP,因为在大多数类似C的语法。也许你正在考虑Perl;他们需要那里,为这种形式的语法。

冒号事件是PHP支持的备用控制结构形式。我讨厌它,但有些人(特别是模板系统设计师)显然喜欢它。

7

要进入更详细一点,即括号是可选的原因是,语法如下:

if(CONDITION) BLOCK 
[elseif(CONDITION) BLOCK] 
[else BLOCK] 

块可以是单个语句:

foo(); 

,或者它可以被大括号包围的一组陈述:

{ 
    foo(); 
    bar(); 
} 
2

在我看来

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR); 

是有效的,但更难阅读比:

if ($REMOTE_ADDR == "") { 
    $ip = "no ip"; 
} else { 
    $ip = getHostByAddr($REMOTE_ADDR); 
} 
-2
brackets are needed to enclose what you want to do if the condition is true 

我想不出任何语言的需要此

0

是,不包括括号是允许的,但很多时候,我听说了2个不使用该句法的理由:

  1. 这很难t o阅读。另一位程序员不太明显。
  2. 如果你曾经想在if里添加一些东西,那么你需要在第一次编码之后添加更难的大括号,因为大多数编辑会为你添加右大括号。

此外,是的,冒号语法是有效的。替代品可以在这里找到:http://php.net/manual/en/control-structures.alternative-syntax.php