34

我只是在浏览一个论坛,有人询问他们在网上找到的一个 PHP 文件。它在代码中有几个这样的地方:

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

如果条件为真,我一直认为需要括号来括起你想要做的事情。是否有其他选择,例如它是否在您不在的同一行上?

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

我的直觉是说这行不通,但我也不知道它是否是一个过时的 PHP 文件并且它曾经可以工作?

4

7 回答 7

76

你可以做这样的 if 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
?>



然后你也可以用另一种语法编写 if - else :

<?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;
?>
于 2008-12-19T15:27:08.373 回答
10

更详细地说,大括号是可选的原因是语法看起来像:

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

BLOCK 可以是单个语句:

foo();

或者它可以是一组用大括号括起来的语句:

{
    foo();
    bar();
}
于 2008-12-19T15:31:50.317 回答
2

大括号(不是方括号)在 PHP 中是可选的,就像在大多数类似 C 的语法中一样。也许您正在考虑 Perl;对于这种形式的 if 语法,它们是必需的。

冒号是 PHP 支持的另一种控制结构形式。我讨厌它,但有些人(尤其是模板系统设计师,显然)喜欢它。

于 2008-12-19T15:28:03.817 回答
2

在我看来

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

是有效的,但比以下内容更难阅读:

if ($REMOTE_ADDR == "") {
    $ip = "no ip"; 
} else {
    $ip = getHostByAddr($REMOTE_ADDR);
}
于 2008-12-19T15:32:46.273 回答
2

9 年过去了,我很惊讶没有人提到三元运算符

$ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);

恕我直言,分配更清楚 - 因为它会导致变量被分配,就像通常的变量分配一样。

于 2018-07-30T04:37:12.933 回答
1

是的,允许排除大括号,尽管我多次听到不使用该语法的两个原因:

  1. 更难阅读。对另一个程序员来说不太明显。
  2. 如果你想在 if 中添加一些东西,那么你需要添加大括号,这在你第一次编码之后会更难,因为大多数编辑器都会为你添加右大括号。

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

于 2008-12-19T15:37:07.513 回答
-3
brackets are needed to enclose what you want to do if the condition is true

我想不出任何需要这个的语言

于 2008-12-19T15:35:21.277 回答