Определение спагетти php?

Для рекурсивного преобразования полного дерева каталогов из iso-8859-1 в utf-8, включая создание подкаталогов, ни одно из приведенных выше кратких решений не сработало для меня, поскольку структура каталога не была создана в целевом объекте. Основываясь на ответе Денниса Уильямсона, я нашел следующее решение:

find . -type f -exec bash -c 't="/tmp/dest"; mkdir -p "$t/`dirname {}`"; iconv -f iso-8859-1 -t utf-8 "{}" > "$t/{}"' \;

Он создаст клон текущего поддерева каталога в /tmp/dest (с учетом ваших потребностей), включая все подкаталоги и все iso-8859-1 файлы преобразованы в utf-8. Проверено на macosx.

Кстати: проверьте кодировки файлов с помощью:

file -I file.php

, чтобы получить информацию о кодировке.

Надеюсь, это поможет.

5
задан skaffman 1 June 2011 в 20:03
поделиться

5 ответов

Термин «спагетти-код» совсем не специфичен для PHP - он применяется ко всем языкам программирования и должен выглядеть очень похожим на большинстве языков (по крайней мере, с той же парадигмой). Однако, возможно, вы это понимаете и просто хотите привести пример на PHP.

Статья Википедии на эту тему кажется довольно ясной:

Код спагетти - уничижительный термин для исходного кода, который имеет сложный и запутанная структура управления, особенно тот, который использует много GOTO, исключения, потоки или другие «неструктурированные» ветвящиеся конструкции. Он назван так потому, что поток программы имеет тенденцию выглядеть как миска с спагетти, т.е. скрученные и запутанные. Код спагетти может быть вызван несколько факторов, в том числе неопытные программисты и сложная программа, которая была постоянно модифицируется в течение долгого срока службы цикл. Структурированное программирование в значительной степени снизилось количество спагетти code.

Эта ветка форума, Топ-100 признаков того, что я пишу спагетти-код на PHP , может быть вам полезна, поскольку она относится конкретно к PHP.

9
ответ дан 18 December 2019 в 06:36
поделиться

Разница в том, что спагетти-код написан другими разработчиками. Ваш код никогда не бывает спагетти-кодом.

11
ответ дан 18 December 2019 в 06:36
поделиться

Вот довольно приличное определение спагетти-кода .

Это субъективный термин, который используется для описания чрезмерно запутанного, плохо структурированного, трудного для понимания кода. -следующий, непоследовательный, зависящий от побочных эффектов (особенно глобальных побочных эффектов) или их комбинации.

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

4
ответ дан 18 December 2019 в 06:36
поделиться

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

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

Если функция возвращает неожиданное значение, чистый код позволит вам начать с оператора return и работать в обратном направлении, чтобы увидеть, откуда оно взялось. Однако, если код спагетти, то примерно половину времени вы будете тратить часы, ломая голову над тем, как функция может возвращать это значение, пока вы случайно не наткнетесь на второй оператор return, похороненный в середине функции.

Я категорически не согласен с утверждениями Клетуса и Андомара, что все все субъективно. Оператор return в середине вашей функции явно представляет собой спагетти-код.

0
ответ дан 18 December 2019 в 06:36
поделиться

Классическое определение спагетти-кода - это «код, поток управления которого трудно отслеживать из-за использования неструктурированного ветвления». Поскольку PHP, как и большинство языков, изобретенных с 1970-х годов, не поддерживает GOTO, вы теоретически не можете написать его спагетти-код. (Обновление: начиная с версии 5.3 в PHP есть оператор goto, но он все еще несколько ограничен в деструктивном потенциале)

Однако хорошее приближение может быть достигнуто с помощью длинных скриптов и функций, в которых широко используются глобальные переменные. Бонусные баллы за глубоко вложенные каскады if / elseif / else и плохое форматирование. Добавьте дикое смешение HTML,

0
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: