Подтвердить что ты не робот

PHP #region для сгибания кода?

Есть ли equivilent С# #области в PHP?

4b9b3361

Ответ 1

Нет.

Дело в том, что С# - это своего рода программа, предназначенная для написания только одной IDE, потому что Microsoft должна всегда использовать их инструменты. Таким образом, встроенные в язык (вроде) вещи, которые влияют на IDE.

PHP, с другой стороны, является просто языком. Он не должен иметь симбиотических отношений с каким-то конкретным редактором, так что это не так. Итак, нет, ему нечего контролировать ваш редактор.

Тем не менее, все правильные текстовые редакторы программного обеспечения поддерживают определения складных классов, определения функций и большинство блоков областей. Некоторые редакторы могут позволить некоторым расширениям выйти за рамки этого.

Ответ 2

Нет, на этом языке нет ничего.

Но все приличные редакторы позволяют разрешить такую ​​разметку.

Например, в Netbeans:

// <editor-fold defaultstate="collapsed" desc="user-description">
  ...any code...
// </editor-fold>

Этот синтаксис также работает во всех семействах редакторов Intellij IDEA, см. http://blog.jetbrains.com/webide/2012/03/new-in-4-0-custom-code-folding-regions/

Вы также можете эмулировать функцию в Eclipse через плагин: Кодовый складной плагин для Eclipse?

Ответ 3

Как уже говорилось ранее, #region в .Net - это фактически функция Visual Studio, а не С# 1, но тот факт, что грамматика С# поддерживает синтаксис, позволяет использовать ее любой IDE, которая хочет ее реализовать. Так как в PHP символ "#" также используется для комментариев, то это же можно сделать с помощью IDE. Фактически, PhpStorm JetBrains делает это: https://blog.jetbrains.com/phpstorm/2012/03/new-in-4-0-custom-code-folding-regions/

Ответ 4

Нет эквивалента (другие ответы объясняют почему), но позвольте мне показать вам, как я это делаю:

//////////////////////////
/* REGION A */ {

    function SomeFunction() {
        return true;
    }

    function AnotherFunction() {
        return false;
    }

}

//////////////////////////
/* REGION B */ {

    function ThirdFunction() {
        return true;
    }

    function FourthFunction() {
        return false;
    }

}

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

Сложенный результат:

//////////////////////////
/* REGION A */ { 

//////////////////////////
/* REGION B */ { 

Ответ 5

Если вы используете блокнот ++, вы можете определить такую ​​вещь с идеей в пользовательском диалоге языков, а так как старый добрый регион начинается с знака фунта, он отлично работает, потому что фунт "#" на самом деле является одним из способов отметить в php комментарий. Но я пробовал его в версии 6.6.6 из блокнота ++, и у него уже есть функция #region #endregion, которая уже ничего не нужно делать.

Ответ 6

PhpStorm поддерживает сворачивание кода, аналогичное С#:

#region [comment about what the code does]

code....

#endregion

Ответ 7

Возможно, вы сможете просто использовать фигурные скобки {}, но это действительно зависит от вашего редактора.

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

Ответ 8

Я использую Geany в Linux для выполнения своего PHP-программирования, и он поддерживает #region и #endregion для маркировки областей кода и работает так же, как MS Visual Studio, на языке С#.

PHP Комментарии могут быть выполнены с использованием //,/* и */и # тоже, поэтому PHP будет просто обходить эти строки, начиная С#, и до вашего текстового редактора /IDE, чтобы использовать это... И Geany делает!

Ответ 9

Я знаю, что это старый поток, но на случай, если вы заинтересованы.

Я успешно выполнил сложение кода #region/#endregion в emacs, адаптировав этот пример кода в режим php: http://blogs.msdn.com/b/dotnetinterop/archive/2008/04/14/making-hideshow-el-work-with-csharp-mode-el-and-region-endregion.aspx

Результат здесь:

; ===== PHP style region folding
(defun php-hs-forward-sexp (&optional arg)

  "I set hs-forward-sexp-func to this function.

I found this customization necessary to do the hide/show magic in PHP
code, when dealing with region/endregion. This routine
goes forward one s-expression, whether it is defined by curly braces
or region/endregion. It handles nesting, too.

The forward-sexp method takes an arg which can be negative, which
indicates the move should be backward.  Therefore, to be fully
correct this function should also handle a negative arg. However,
the hideshow.el package never uses negative args to its
hs-forward-sexp-func, so it doesn't matter that this function does not
do negative numbers.

The arg can also be greater than 1, which means go forward
multiple times. This function doesn't handle that EITHER.  But
again, I haven't see that as a problem."

(message "php-hs-forward-sexp, (arg %d) (point %d)..."
    (if (numberp arg) arg -1)
    (point)
    )

(let ((nestlevel 0)
    (mark1 (point))
    (done nil)
    )
    (if (and arg (< arg 0))
        (message "negative arg (%d) is not supported..." arg)

        ;; else, we have a positive argument, hence move forward.
        ;; simple case is just move forward one brace
        (if (looking-at "{")
            (forward-sexp arg)

        ; The more complex case is dealing with a "region/endregion" block.
        ; We have to deal with nested regions!
        (and
            (while (not done)
                (re-search-forward "^[ \\t]*#[ \\t]*\\(region\\|endregion\\)\\b"
                (point-max) 'move)
                (cond
                    ((eobp)) ; do nothing if at end of buffer
                ((and
                    (match-beginning 1)
                    ;; if the match is longer than 6 chars, we know it is "endregion"
                    (if (> (- (match-end 1) (match-beginning 1)) 6)
                        (setq nestlevel (1- nestlevel))
                        (setq nestlevel (1+ nestlevel))
                    )
                )))
                (setq done (not (and (> nestlevel 0) (not (eobp)))))
                ); while

            (if (= nest 0)
                (goto-char (match-end 2))
            )
        ))
    )
)
)


(unless (assoc 'php-mode hs-special-modes-alist)
    (push '(php-mode
        ; "\\(^\\s*#\\s*region\\b\\)\\|{"        ; regexp for start block DID NOT WORK
        "\\(^[ \\t]*#[ \\t]*region\\b\\)\\|{"    ; regexp for start block

        ; "\\(^\\s*#\\s*endregion\\b\\)\\|}"     ; regexp for end block NO WORKY!
        "\\(^[ \\t]*#[ \\t]*endregion\\b\\)\\|}" ; regexp for end block

        "/[*/]"                                  ; regexp for comment start

        php-hs-forward-sexp                      ; hs-forward-sexp-func
        hs-c-like-adjust-block-beginning         ; c-like adjust (1 char)
        ;php-hs-adjust-block-beginning           ; php adjust ?
        )
        hs-special-modes-alist)
    )


;;
;; To use this, put this into your php-mode-hook:
;;
; for hide/show support
(add-hook 'php-mode-hook 'php-region-mode-stuff)

(defun php-region-mode-stuff ()
    (hs-minor-mode 1)
    (setq hs-isearch-open t)
    ; with point inside the block, use these keys to hide/show
    (local-set-key "\C-c>"  'hs-hide-block)
    (local-set-key "\C-c<"  'hs-show-block)
)

Ответ 10

В Sublime Text есть пакет под названием SyntaxFold.

Установка

  • Ctrl + Shift + P введите команду install и выберите "Управление пакетами: установите пакет";
  • В новом меню типа SyntaxFold начните загрузку и установку, выбрав его:
  • Проверьте, находится ли строка состояния ниже, если она была установлена ​​правильно.

Конфигурация

  • Нажмите Shift + F5, чтобы открыть панель сложения и выберите "Добавить еще" для доступа к конфигурационному файлу;
  • Убедитесь, что он имеет значение по умолчанию со строками, которые вы хотите (по какой-то нечетной причине у меня была цитата перед хэшем: '#Start). Я закончил тем, что изменил его на:

    {
        //you can change in here other config options
        "default":
        {
            "endMarker": "#EOB",
            "name": "Default",
            "startMarker": "#BOB"
        }
    }
    
  • Вы также можете изменить привязки клавиш (те, что указаны ниже в разделе Использование) в Windows, изменив их в файле:

    C:\Users\YOUR_USER\AppData\Roaming\Sublime Text 3\Packages\SyntaxFold\Default (Windows).sublime-keymap

Использование

  • Добавьте теги, которые вы указали в файле конфигурации (вы можете добавить описание после каждого тега), в моем случае:

    #BOB pandora box
    public function alpha()
    {
        # code...
    }
    public function omega()
    {
        # code...
    }
    #EOB pandora box
    
  • Чтобы скрыть код между тегами, поместите курсор между ними и нажмите Alt + 1 дважды.
  • Чтобы снова показать его, поместите курсор на первый тег и нажмите Alt + Shift + 1 дважды.

Альтернатива для блоков комментариев

Если вас просто интересуют складывающиеся блоки комментариев, а затем Fold Comments, вы можете нажать Ctrl + Shift + C чтобы скрыть и показать все комментарии (это может скрыть теги SyntaxFold, хотя).

Ответ 11

В Visual Studio Code вы можете "чувствовать себя как дома" с такими областями в стиле С#, как это:

#region Constants
    const ICEBERGS_PER_TITANIC = 100000000;
    const COFFEE_IV_DRIP_RATE = 0.00005;
#endregion

Технически, region Constants не требуются, все, что нужно, это знак #. Но для разработчиков на С#, которые привыкли видеть это (поскольку Visual Studio настаивает на том, чтобы это было так), это не очень шумно. И это на самом деле самодокументирование. Программист обслуживания PHP не был бы забит этим.


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

#deathstar Constants
    const ICEBERGS_PER_TITANIC = 100000000;
    const COFFEE_IV_DRIP_RATE = 0.00005;
#deathstar

# Constants
    const ICEBERGS_PER_TITANIC = 100000000;
    const COFFEE_IV_DRIP_RATE = 0.00005;
#

Ответ 12

Временное решение

- if(true){
     // some code
  }

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

 $region = 'load_parameters';
 if($region == 'load_parameters'){
     // some code
 }

Ответ 14

Хотя это старый поток, но если он все еще заинтересован, можно установить ярлык для свертывания кода в NetBeans. Этот ответ расширяет ответ @krtek. Для этого выполните следующие действия:

  1. Перейдите в Инструменты> Параметры> Редактор> Шаблоны кода

  2. Нажмите New, введите "cf" как сокращение, затем введите следующий код в качестве расширенного текста:

     // <editor-fold defaultstate="collapsed" desc=" ${DESCRIPTION} ">
        ${selection line}${cursor}
        // </editor-fold>
  1. На вкладке описания введите "Свертывание кода" и нажмите "ОК".

Теперь, если вы выделите несколько строк текста в редакторе, вы получите значок "лампочка" на полях. Нажмите на нее, и вы получите опцию "Окружить с помощью свертывания кода". Выберите его, введите описание, и все готово.

Для справки смотрите эту ссылку: ссылка

Ответ 15

Как уже упоминалось, #region и #endregion - это функция IDE, а не функция языка. Visual Studio Code поддерживает его для PHP (не уверен, поддерживает ли он его изначально или благодаря расширениям PHP. У меня есть расширения PHP IntelliSense и PHP InteliPhense). Если вы еще не опробовали VSC, вам следует... это отличная IDE, доступная практически для всех ОС, бесплатная и с открытым исходным кодом.