Я просто просматривал форум, и кто-то спросил о файле PHP, который они нашли в Интернете. В коде есть несколько таких мест:
if ($REMOTE_ADDR == "") $ip = "no ip";
else $ip = getHostByAddr($REMOTE_ADDR);
Я всегда думал, что скобки необходимы, чтобы заключить то, что вы хотите сделать, если условие истинно. Есть ли другая альтернатива, например, если она находится на той же линии, что и вы?
Есть еще такая строчка:
if ($action != ""):
mail("$adminaddress","Visitor Comment from YOUR SITE",
Мой инстинкт - сказать, что это не сработает, но я также не знаю, является ли это устаревшим файлом PHP и работал ли он раньше?






вы можете использовать такие инструкции 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;
?>
В последнем примере дополнительная переменная не нужна: echo $ something? «что-то было правдой»: «что-то было ложью»;
Я знаю, что это работает, но я думаю, что где-то читал, что это был недокументированный результат (и, следовательно, может измениться в будущей версии). Хотя не уверен.
Не могли бы вы также использовать elseif для одной строки такого условного кода? if ($ something) $ result = 'что-то было правдой'; elseif ($ something_else) $ result = 'что-то еще было правдой'; else $ result = 'ничего не правда';
Может ли "elseif" оставить условие if пустым? (т.е. работает ли "elseif:"?)
обратите внимание, что удобнее делать отступ для одной условной строки кода
вам нужно объяснить или добавить блок: elseif (CONDITION) ..., как следующий ответ, .... потому что второй блок вашего кода не имеет условия и не указывает, зачем использовать какое-то описание или часть кода: if (): {echos } elseif: {echos} else:
Мне нравится синтаксис «двоеточие», он действительно похож на питон, и мне гораздо легче его читать с помощью кода с правильным отступом. Досрочное закрытие скобок - более распространенная ошибка, по крайней мере для меня, чем забвение endif.
Скобки (не скобки) не являются обязательными в PHP, как и в большинстве C-подобных синтаксисов. Может быть, вы думаете о Perl; они требуются там для этой формы синтаксиса if.
Двоеточие - это альтернативная форма структуры управления, которую поддерживает PHP. Я ненавижу это, но некоторым людям (особенно разработчикам шаблонных систем, очевидно) это нравится.
Спасибо, должно быть, я сначала изучил Perl, и, должно быть, более строгая сторона меня считала, что это неправильно.
Чтобы углубиться в детали, причина того, что фигурные скобки необязательны, заключается в том, что синтаксис выглядит так:
if (CONDITION) BLOCK
[elseif (CONDITION) BLOCK]
[else 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);
}
Мне нравится if (statement) process; else process2;, все на отдельных строчках. Он выглядит так же, как и со скобками, за исключением скобок.
brackets are needed to enclose what you want to do if the condition is true
Я не могу придумать ни одного языка, который требует этого
Да, исключение фигурных скобок разрешено, хотя много раз я слышал 2 причины не использовать этот синтаксис:
Кроме того, да, синтаксис двоеточия допустим. Альтернативы можно найти здесь: http://php.net/manual/en/control-structures.alternative-syntax.php
--- 1. Сложнее читать. Менее очевидно для другого программиста. Это спорно. Многим программистам нравится «впитывать» больше кода с меньшей вертикальной прокруткой (я не говорю, что вам нужно писать несколько инструкций ;;; в одной строке). Таким образом вы можете лучше увидеть «большую картину». Но согласен, для режима отладки всегда лучше.
Прошло 9 лет, и я удивлен, что никто не упомянул тернарный оператор:
$ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);
Гораздо яснее для присвоения IMHO - потому что это приводит к присвоению переменной, как и для обычного назначения переменной.
Ответ @ Jacco предоставляет этот пример.
Ого, я не знал, что существует так много вариантов структурирования php-кода. Спасибо!