web-dev-qa-db-ja.com

PHP条件、括弧が必要ですか?

私はちょうどフォーラムを閲覧していて、誰かがWeb上で見つけたPHPファイルについて尋ねました。コードには次のようなスポットがいくつかあります:

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

条件が真の場合にやりたいことを囲むには角かっこが必要だといつも思っていました。同じ回線上にある場合など、他に選択肢はありますか?

このような別の行もあります:if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",

私の本能は、これは機能しないと言うことですが、それが古いPHPファイルであり、以前は機能していたかどうかもわかりません。

29
Levi

次のような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;
?>
67
Jacco

もう少し詳しく説明すると、中括弧がオプションである理由は、構文が次のようになっているためです。

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

BLOCKは単一のステートメントにすることができます。

foo();

または、中括弧で囲まれたステートメントのグループにすることもできます。

{
    foo();
    bar();
}
9
chaos

私の考えでは

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

は有効ですが、以下よりもはるかに読みにくいです。

if ($REMOTE_ADDR == "") {
    $ip = "no ip"; 
} else {
    $ip = getHostByAddr($REMOTE_ADDR);
}
2
smartcoder

9年経ちましたが、誰も言及していないことに驚いています 三項演算子

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

割り当てIMHOの方がはるかに明確です-通常の変数割り当てと同様に、割り当てられている変数が表示されるためです。

2
Velojet

PHPでは、ほとんどのCに似た構文と同様に、中括弧(角かっこではない)はオプションです。多分あなたはPerlについて考えています。その形式のif構文では、それらが必要です。

コロンのものは、PHPがサポートする代替の制御構造形式です。私はそれを嫌いますが、一部の人々(特にテンプレートシステム設計者)はそれを愛しています。

1
chaos

はい、中括弧を除外することは許可されていますが、その構文を使用しない2つの理由を何度も聞いています。

  1. 読みにくいです。他のプログラマーにはあまりわかりません。
  2. If内に何かを追加したい場合は、最初にコーディングするときに中括弧を追加する必要があります。これは、ほとんどのエディターが中括弧を追加するためです。

また、はい、コロン構文は有効です。代替案はここで見つけることができます: http://php.net/manual/en/control-structures.alternative-syntax.php

1
Darryl Hein