質問
私がちょうどフォーラムを閲覧していたところ、誰かが Web 上で見つけた PHP ファイルについて尋ねてきました。コード内には次のような箇所がいくつかあります。
if ($REMOTE_ADDR == "") $ip = "no ip";
else $ip = getHostByAddr($REMOTE_ADDR);
私は、条件が true の場合に実行したいことを括弧で囲む必要があると常々考えていました。同じ回線上にある場合など、他の代替手段はありますか?
他にも次のような行があります。if ($action != ""):
mail("$adminaddress","Visitor Comment from YOUR SITE",
私の直感では、これは機能しないだろうということですが、それが古い PHP ファイルで、以前は機能していたのかどうかもわかりません。
解決
あなたはこのような場合は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;
?>
他のヒント
もう少し詳しく説明すると、中括弧がオプションである理由は、構文が次のようになっているためです。
if(CONDITION) BLOCK
[elseif(CONDITION) BLOCK]
[else BLOCK]
BLOCK は単一のステートメントにすることができます。
foo();
または、中括弧で囲まれたステートメントのグループにすることもできます。
{
foo();
bar();
}
私の意見では、
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
は有効ですが、より読みはるかに困難ます:
if ($REMOTE_ADDR == "") {
$ip = "no ip";
} else {
$ip = getHostByAddr($REMOTE_ADDR);
}
の9年間、私は誰がの三項演算子を言及していない驚いていますのます:
$ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);
割り当てIMHOのためのより明確に - 。それは通常の変数への代入の場合と同様に、変数が割り当てられた状態で出てしまうので、
ブレース(ないブラケット)最もCのような構文のように、PHPに任意です。たぶん、あなたは、Perlを考えています。彼らはもし構文のその形のために、そこに必要としています。
大腸事はPHPがサポートしている代替制御構造形式です。私はそれを嫌うが、一部の人々は(特にテンプレートシステム設計者は、明らかに)それを愛するます。
はい、中括弧を除外することは許可されていますが、その構文を使用しない理由が 2 つあることを何度も聞いてきました。
- 読むのが難しくなります。他のプログラマにとってはあまり明らかではありません。
- if の中に何かを追加したい場合は、中括弧を追加する必要があります。これは、ほとんどのエディターが閉じ中括弧を追加してくれるため、最初のコーディング時にその後の作業がより困難になります。
また、はい、コロン構文は有効です。代替案はここで見つけることができます。 http://php.net/manual/en/control-structs.alternative-syntax.php
brackets are needed to enclose what you want to do if the condition is true
私はこれを必要とする任意の言語を考えることはできません。