Используйте фигурные скобки для структурирования кода в PHP - программирование
Подтвердить что ты не робот

Используйте фигурные скобки для структурирования кода в PHP

Можно ли заключить фрагменты кода в PHP в скобках (без использования фрагмента как функции)?

Будет ли следующий код вести себя так же, как и без фигурных скобок? Или могут возникнуть проблемы в зависимости от того, какой код используется внутри или вне скобок?

Например, будет ли это:

<?php

// First Code-Block
{# several lines of code
}

// Second Code-Block
{# another several lines of code
}

?>

Всегда вести себя так же, как это:

<?php

// First Code-Block
# several lines of code

// Second Code-Block
# another several lines of code

?>
4b9b3361

Ответ 1

Поведение кода PHP не изменяется, если вы заключите его в фигурные скобки. Однако вы не можете использовать некоторые инструкции PHP внутри фигурных скобок:

  • namespace объявления;
  • namespace use объявления для псевдонима или импорта любых имен;
  • глобальные объявления const;
  • __halt_compiler().

Это означает, что будет работать следующий script:

<?php
const x = 5;
echo x;

но следующее не будет компилироваться:

<?php
{
  const x = 5;
  echo x;
}

Ответ 2

Да, но он не создаст новую локальную область. Это не то, что обычно было бы сделано. Обычно люди отмечают блоки с комментариями.

Update:

Потребовалось немного поиска, чтобы найти ссылку на него в руководстве, но вот оно:

http://www.php.net/manual/en/control-structures.intro.php

Любой PHP script построен из ряда операторов. Оператором может быть назначение, вызов функции, цикл, условный оператор или даже оператор, который ничего не делает (пустой оператор). Заявления обычно заканчиваются точкой с запятой. Кроме того, операторы могут быть сгруппированы в группу операторов путем инкапсуляции группы операторов с фигурными фигурными скобками. Группа заявлений сама по себе является выражением. Различные типы операторов описаны в этой главе.

Ключевым здесь является , операторы могут быть сгруппированы в группу-оператор путем инкапсуляции группы операторов с фигурными фигурными скобками.

Я также искал ссылку на область видимости переменной, поскольку это относится к этой ситуации, но в руководстве конкретно не упоминается, однако вы можете думать о это примерно так:

В PHP функции и классы создают область переменной. Вы можете прочитать об этом здесь. Но группа заявлений (как описано выше) не делает. Не думайте о фигурных скобках группы-оператора, таких как скобки-скобки функции (или класса), но думайте о них как фигурные скобки, которые обертывают группу-оператор-структуру структур управления (if, for, while, switch и т.д.) - потому что это именно то, что они есть. Ясно, что если вы используете оператор if (или любую другую структуру управления), в которой фигурные скобки не вводят новую область, они просто являются оболочками для блока операторов.

Ответ 3

В одном проекте, над которым я работаю, я использую группы операторов для указания структуры. В моем случае отношения родителя/ребенка между узлами создают в маршрутизаторе:

$router = new Router();

$admin = $router->route('admin');
{
    $upload = $admin->route('upload')->post('upload');

    $menu = $admin->route('menu');
    {
        $menu->route('load')->get('load');
        $menu->route('save')->get('save');
    }
}

`` `

Внутренне это создает иерархическую структуру, например:

/admin
  /upload
  /menu
    /load
    /save

Вызов route() в этом примере создает дочерний элемент - поэтому код создает модель (внутри маршрутизатора), которая имеет древовидную структуру, но структура кода не отражает этого.

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

$router = new Router();

$admin = $router->route('admin');
$upload = $admin->route('upload')->post('upload');
$menu = $admin->route('menu');
$menu->route('load')->get('load');
$menu->route('save')->get('save');

Отступ в этом случае действительно разъясняет, что происходит, я думаю.

Ответ 4

Я также делаю это исключительно из-за моего текстового редактора (Komodo Edit 8.5). Это не "плохая причина" или "плохое кодирование", если это помогает вам и не вызывает никаких проблем, и если нет другого простого способа сделать это.

Я решаю проблему с обходом:

if(1 == 1){ //always executing if function
//whatever you want to add
}
#

Добавление # в конец не позволяет моему редактору свернуть все пустые строки ниже фигурных скобок. Это помогает еще больше структурировать код.