PHP условные, скобки нужны? - PullRequest
       23

PHP условные, скобки нужны?

28 голосов
/ 19 декабря 2008

Я просто просматривал форум, и кто-то спросил о файле PHP, который они нашли в Интернете. В коде есть несколько таких мест:

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

Я всегда думал, что скобки необходимы, чтобы заключить, что вы хотите сделать, если условие выполняется. Есть ли какая-то другая альтернатива, например, если она находится на той же линии, что и вы?

Есть еще одна строка, подобная этой: if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",

Мой инстинкт в том, чтобы сказать, что это не сработает, но я также не знаю, является ли это устаревшим файлом PHP и работал ли он раньше?

Ответы [ 7 ]

66 голосов
/ 19 декабря 2008

вы можете сделать, если еще такие заявления:

<?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;
?>
9 голосов
/ 19 декабря 2008

Если говорить более подробно, причина того, что скобки являются необязательными, заключается в том, что синтаксис выглядит следующим образом:

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

БЛОК может быть одним оператором:

foo();

или это может быть заключенная в скобки группа операторов:

{
    foo();
    bar();
}
2 голосов
/ 30 июля 2018

9 лет, и я удивлен, что никто не упомянул троичный оператор :

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

Намного понятнее для присвоения ИМХО - потому что оно заканчивается с назначаемой переменной, как для обычного присвоения переменной.

2 голосов
/ 19 декабря 2008

На мой взгляд

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

допустимо, но гораздо труднее читать, чем:

if ($REMOTE_ADDR == "") {
    $ip = "no ip"; 
} else {
    $ip = getHostByAddr($REMOTE_ADDR);
}
1 голос
/ 19 декабря 2008

Скобки (не скобки) являются необязательными в PHP, как и в большинстве C-подобных синтаксисов. Может быть, вы думаете о Perl; они нужны там для этой формы синтаксиса if.

Двоеточие - это альтернативная форма структуры управления, которую поддерживает PHP. Я ненавижу это, но некоторые люди (особенно дизайнеры системы шаблонов, очевидно) любят это.

0 голосов
/ 19 декабря 2008

Да, исключение скобок разрешено, хотя много раз я слышал 2 причины, по которым этот синтаксис не используется:

  1. Труднее читать. Менее очевидно для другого программиста.
  2. Если вы когда-нибудь захотите добавить что-то в if, то вам нужно добавить скобки, которые сложнее после того, когда вы впервые кодируете, так как большинство редакторов добавят закрывающую скобку для вас.

Кроме того, да, синтаксис двоеточия действителен. Альтернативы можно найти здесь: http://php.net/manual/en/control-structures.alternative-syntax.php

0 голосов
/ 19 декабря 2008
brackets are needed to enclose what you want to do if the condition is true

Я не могу вспомнить ни одного языка, который требует этого

...