PHP - If / else, for, foreach, while - без фигурных скобок? - PullRequest
48 голосов
/ 04 января 2012

Что-то, что действительно хотелось бы знать, но никогда не узнавать, - это ярлыки в PHP.

В настоящее время я кодирую функцию с циклом foreach с одним оператором внутри. Я попытался опустить фигурные скобки, как вы можете сделать в структурах управления if / else, и это работает Нет ошибок.

foreach($var as $value)
    $arr[] = $value;

Теперь я попытался использовать его таким же образом, но поместил в него блок if / else. Опять работает и без ошибок.

foreach($var as $value)
    if(1 + 1 == 2) {
        $arr[] = $value;
    };

Тогда я подумал: "Почему это работает?" и пропустил точку с запятой. Еще работает. Поэтому я попытался использовать оператор if / else без фигурных скобок внутри цикла foreach и снова, все еще работая и без ошибок. Но действительно ли цикл foreach закрыт / завершен прямо сейчас?

foreach($var as $value)
    if(1 + 1 == 2)
        $arr[] = $value;

По крайней мере, я снова опустил точку с запятой и (как и ожидалось) произошла ошибка синтаксического анализа.

Итак, мой большой вопрос: когда я могу опустить фигурные скобки и в какой структуре / цикле / функции? Я знаю, что определенно могу сделать это в if и else. Но как насчет while, for и foreach?

И да, я знаю, что это небезопасно, умно, что угодно, чтобы кодировать без фигурных скобок, и есть сокращения, такие как $condition ? true : false; и if: doSomething(); endif;, endfor; и endforeach;. Я не хочу узнавать о сокращениях, я просто хочу понять условия, когда и где можно опустить фигурные скобки.

Ответы [ 12 ]

0 голосов
/ 21 апреля 2015

Ответ прост. То же самое в C / C ++.

if, if / else, if / else if / else и loops => Если следующий оператор представляет собой одну строку, вы можете опустить фигурные скобки.

Ex:

for($i= 0; $i<=100; $i++)
{
    if($i % 7 == 0)
    {   
        echo $i . "<br>";
    }

}

Это также можно записать так:

for($i= 0; $i<=100; $i++) if($i % 7 == 0) echo $i . "<br>";
0 голосов
/ 04 января 2012

Это возможно, когда у вас есть только одно выражение после вашего предложения /

Например,

foreach($var as $value)
    if(1 + 1 == 2) {
        $arr[] = $value;
    };

правильно, но

foreach($var as $value)
    $somevar = $var;
    if(1 + 1 == 2) {
        $arr[] = $value;
    };

нет, и интерпретатор php будет думать, что if утверждение находится за пределами foreach

...