Php code formatter / beautifier и php beautification вообще

Знаете ли вы хорошие инструменты для удобного форматирования messy php code? Предпочтительно использовать сценарий для Aptana / Eclipse, но автономный инструмент тоже.

PHP Code Beautifier – полезный бесплатный инструмент, который должен делать то, что вам нужно, хотя на странице загрузки требуется создание учетной записи.

Инструмент был отклонен в 3 версии:

  • Версия GUI, которая позволяет обрабатывать файл визуально.
  • Версия командной строки, которая позволяет объединять или интегрировать с другими инструментами (CVS, SubVersion, IDE …).
  • Как интегрированный инструмент PHPEdit.

В принципе, это повернется:

if($code == BAD){$action = REWRITE;}else{$action = KEEP;} for($i=0; $i<10;$i++){while($j>0){$j++;doCall($i+$j);if($k){$k/=10;}}} 

в

 if ($code == BAD) { $action = REWRITE; } else { $action = KEEP; } for($i = 0; $i < 10;$i++) { while ($j > 0) { $j++; doCall($i + $j); if ($k) { $k /= 10; } } } 

Ну вот мой очень простой и грубый сценарий:

 #!/usr/bin/php <?php class Token { public $type; public $contents; public function __construct($rawToken) { if (is_array($rawToken)) { $this->type = $rawToken[0]; $this->contents = $rawToken[1]; } else { $this->type = -1; $this->contents = $rawToken; } } } $file = $argv[1]; $code = file_get_contents($file); $rawTokens = token_get_all($code); $tokens = array(); foreach ($rawTokens as $rawToken) { $tokens[] = new Token($rawToken); } function skipWhitespace(&$tokens, &$i) { global $lineNo; $i++; $token = $tokens[$i]; while ($token->type == T_WHITESPACE) { $lineNo += substr($token->contents, "\n"); $i++; $token = $tokens[$i]; } } function nextToken(&$j) { global $tokens, $i; $j = $i; do { $j++; $token = $tokens[$j]; } while ($token->type == T_WHITESPACE); return $token; } $OPERATORS = array('=', '.', '+', '-', '*', '/', '%', '||', '&&', '+=', '-=', '*=', '/=', '.=', '%=', '==', '!=', '<=', '>=', '<', '>', '===', '!=='); $IMPORT_STATEMENTS = array(T_REQUIRE, T_REQUIRE_ONCE, T_INCLUDE, T_INCLUDE_ONCE); $CONTROL_STRUCTURES = array(T_IF, T_ELSEIF, T_FOREACH, T_FOR, T_WHILE, T_SWITCH, T_ELSE); $WHITESPACE_BEFORE = array('?', '{', '=>'); $WHITESPACE_AFTER = array(',', '?', '=>'); foreach ($OPERATORS as $op) { $WHITESPACE_BEFORE[] = $op; $WHITESPACE_AFTER[] = $op; } $matchingTernary = false; // First pass - filter out unwanted tokens $filteredTokens = array(); for ($i = 0, $n = count($tokens); $i < $n; $i++) { $token = $tokens[$i]; if ($token->contents == '?') { $matchingTernary = true; } if (in_array($token->type, $IMPORT_STATEMENTS) && nextToken($j)->contents == '(') { $filteredTokens[] = $token; if ($tokens[$i + 1]->type != T_WHITESPACE) { $filteredTokens[] = new Token(array(T_WHITESPACE, ' ')); } $i = $j; do { $i++; $token = $tokens[$i]; if ($token->contents != ')') { $filteredTokens[] = $token; } } while ($token->contents != ')'); } elseif ($token->type == T_ELSE && nextToken($j)->type == T_IF) { $i = $j; $filteredTokens[] = new Token(array(T_ELSEIF, 'elseif')); } elseif ($token->contents == ':') { if ($matchingTernary) { $matchingTernary = false; } elseif ($tokens[$i - 1]->type == T_WHITESPACE) { array_pop($filteredTokens); // Remove whitespace before } $filteredTokens[] = $token; } else { $filteredTokens[] = $token; } } $tokens = $filteredTokens; function isAssocArrayVariable($offset = 0) { global $tokens, $i; $j = $i + $offset; return $tokens[$j]->type == T_VARIABLE && $tokens[$j + 1]->contents == '[' && $tokens[$j + 2]->type == T_STRING && preg_match('/[a-z_]+/', $tokens[$j + 2]->contents) && $tokens[$j + 3]->contents == ']'; } // Second pass - add whitespace $matchingTernary = false; $doubleQuote = false; for ($i = 0, $n = count($tokens); $i < $n; $i++) { $token = $tokens[$i]; if ($token->contents == '?') { $matchingTernary = true; } if ($token->contents == '"' && isAssocArrayVariable(1) && $tokens[$i + 5]->contents == '"') { /* * Handle case where the only thing quoted is the assoc array variable. * Eg. "$value[key]" */ $quote = $tokens[$i++]->contents; $var = $tokens[$i++]->contents; $openSquareBracket = $tokens[$i++]->contents; $str = $tokens[$i++]->contents; $closeSquareBracket = $tokens[$i++]->contents; $quote = $tokens[$i]->contents; echo $var . "['" . $str . "']"; $doubleQuote = false; continue; } if ($token->contents == '"') { $doubleQuote = !$doubleQuote; } if ($doubleQuote && $token->contents == '"' && isAssocArrayVariable(1)) { // don't echo " } elseif ($doubleQuote && isAssocArrayVariable()) { if ($tokens[$i - 1]->contents != '"') { echo '" . '; } $var = $token->contents; $openSquareBracket = $tokens[++$i]->contents; $str = $tokens[++$i]->contents; $closeSquareBracket = $tokens[++$i]->contents; echo $var . "['" . $str . "']"; if ($tokens[$i + 1]->contents != '"') { echo ' . "'; } else { $i++; // process " $doubleQuote = false; } } elseif ($token->type == T_STRING && $tokens[$i - 1]->contents == '[' && $tokens[$i + 1]->contents == ']') { if (preg_match('/[a-z_]+/', $token->contents)) { echo "'" . $token->contents . "'"; } else { echo $token->contents; } } elseif ($token->type == T_ENCAPSED_AND_WHITESPACE || $token->type == T_STRING) { echo $token->contents; } elseif ($token->contents == '-' && in_array($tokens[$i + 1]->type, array(T_LNUMBER, T_DNUMBER))) { echo '-'; } elseif (in_array($token->type, $CONTROL_STRUCTURES)) { echo $token->contents; if ($tokens[$i + 1]->type != T_WHITESPACE) { echo ' '; } } elseif ($token->contents == '}' && in_array($tokens[$i + 1]->type, $CONTROL_STRUCTURES)) { echo '} '; } elseif ($token->contents == '=' && $tokens[$i + 1]->contents == '&') { if ($tokens[$i - 1]->type != T_WHITESPACE) { echo ' '; } $i++; // match & echo '=&'; if ($tokens[$i + 1]->type != T_WHITESPACE) { echo ' '; } } elseif ($token->contents == ':' && $matchingTernary) { $matchingTernary = false; if ($tokens[$i - 1]->type != T_WHITESPACE) { echo ' '; } echo ':'; if ($tokens[$i + 1]->type != T_WHITESPACE) { echo ' '; } } elseif (in_array($token->contents, $WHITESPACE_BEFORE) && $tokens[$i - 1]->type != T_WHITESPACE && in_array($token->contents, $WHITESPACE_AFTER) && $tokens[$i + 1]->type != T_WHITESPACE) { echo ' ' . $token->contents . ' '; } elseif (in_array($token->contents, $WHITESPACE_BEFORE) && $tokens[$i - 1]->type != T_WHITESPACE) { echo ' ' . $token->contents; } elseif (in_array($token->contents, $WHITESPACE_AFTER) && $tokens[$i + 1]->type != T_WHITESPACE) { echo $token->contents . ' '; } else { echo $token->contents; } } 

http://en.sourceforge.jp/projects/pdt-tools/

^^^ даст вам правильный текстовый редактор CTRL + SHIFT + F Eclipse / Aptana, такой как Java.

См. Здесь для справки по установке.

Форматирование php-кода eclipse

Есть модуль груши, который форматирует ваш код. PHP Beautifier

Если вы используете среду разработки Zend, вы можете использовать функцию кода отступа (Ctrl + Shift + F).

Вот класс php code beautifier (PHP, конечно):
http://www.codeassembly.com/A-php-code-beautifier-that-works/

а также

онлайн-демонстрация:

http://www.codeassembly.com/examples/beautifier.php

Используйте NetBeans PHP и нажмите alt + shift + F.

Zend Development Environment теперь является плагином Eclipse, вы можете запустить его вместе с Aptana и просто использовать его функцию «Отступы».

Zend Studio

Я еще не обновился до плагина Eclipse, мне так нравится предыдущий ZDE. Хотя теперь, когда я начал использовать Eclipse для других языков, я почти готов совершить прыжок.

Как насчет этого:

http://universalindent.sourceforge.net/

Он сочетает в себе кучу форматировщиков и генерирует нужные вам сценарии, чтобы вы могли их выдать и заставить своих членов команды использовать их, прежде чем совершать в следующий раз … Хотя … formatters могут испортить ваш код и отобразить его непригодный для использования …

Наш PHP Formatter будет надежно форматировать ваш код. Он использует внешний интерфейс на основе компилятора для анализа кода, поэтому он не искажает код и не повреждает его. Следовательно, его отформатированный вывод всегда работает.

Самое простое решение – просто использовать интегрированную среду разработки, в которой встроена эта функция. Если вы собираетесь регулярно писать код на PHP, просто снимите $ 60 за PHPStorm. Вы не пожалеете об этом.

http://www.jetbrains.com/phpstorm/

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

phpformatter.com работает лучше всего

«Этот бесплатный онлайн-PHP Formatter разработан так, чтобы вы могли украсить весь свой PHP-скрипт с помощью стиля, который вы предпочитаете»

Это отличный вопрос. У меня есть приложение, которое читает json и выводит php и html и css. Я запускаю программу и создаю десятки (сотни?) Файлов. Надеюсь, что ответ здесь полезен.

Я начал свой проект, используя heredocs, специальные файлы include, мета-символы и т. Д., Но это быстро стало беспорядком. Я хотел создать автономное решение, которое не требовало бы рамки или идеи. Поэтому я удалил все heredoc и другие нежелательные файлы и создал общий класс буферизации текста, не заботясь о форматировании. Это все может быть одной линией для всего, что мне нужно. Для html я использую tidy (). Для php я использую phpstylist . phpstylist старше, но все еще хорошо работает для формата php.

Чтобы настроить параметры phpstylist, я использовал UniversalIndent (обновленный январь 2012) в windows gui.

UniversalStylist перечисляет 24 (!) Программы форматирования (c, php, ruby, html, …). Он специально знает параметры для phpstylist и дает вам живое обновление в файле при включении и выключении опций. Очень здорово. Затем, когда у вас есть свой стиль, у него есть возможность сохранить параметры командной строки и создать сценарий. Для некоторых параметров форматирования вам придется добавлять пути к perl, python и т. Д.

Если вы используете окна и хотите попробовать phpstylist с помощью UniversalIndent, просто добавьте каталог для php.exe в ваш env-путь. Я использую ampps, поэтому my установлен в c: \ ampps \ php.

Было нелегко найти хорошее твердое решение. Мне также интересно узнать, что делают другие люди для простого, возможного пакетного форматирования автоматически сгенерированных файлов php / html для проверки кода и архивирования.

У меня возникли проблемы с поиском достойного бесплатного форматирования для PHP, есть много онлайн-инструментов и инструментов командной строки, но они просто не работают по какой-то причине, результаты все еще полны плохих отступов с комбинациями вкладок и пробелов, и они никогда не получают брекеты так, как вы хотите их!

Я попробовал фрагмент выше, и это тоже не сработало для меня, отступы все еще заполнены пробелами и вкладками.

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

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

https://www.organicdesign.co.nz/Special:CodeTidy