Удалите повторяющиеся жестко запрограммированные циклы и условия в PHP.

StackOverflow https://stackoverflow.com/questions/210475

  •  03-07-2019
  •  | 
  •  

Вопрос

Я видел этот вопрос о C#. Мне нужен ответ по PHP.У меня есть старый код, содержащий 4 страницы циклов и условий foreach, из-за чего его трудно читать и следовать ему.Как бы мне сделать это более ОО?Я думал об использовании функций SPL, но еще не до конца понимаю, что для этого нужно.

Это было полезно?

Решение

Этот код, вероятно, можно существенно подчистить и продвинуть далеко в сторону объектно-ориентированного подхода, не затрагивая SPL.

SPL необходим только в том случае, если вы хотите изменить нормальное поведение объекта в языковых конструкциях, таких как foreach(), или во встроенных функциях, таких как count(), или в функциях доступа к массиву (как оператор [], так и такие функции, как key(), next() и т. д.). .

Рекомендации по очистке:

  • Если одно и то же действие выполняется в коде несколько (более 1 или 2) раз, разбейте его на функцию.Если это действие необходимо выполнить для всех элементов массива, рассмотрите возможность использования array_walk.Если по какой-то причине обход массива не подходит, используйте цикл :)
  • Если у вас есть несколько экземпляров некоторых семантически связанных данных, более сложных, чем пара ключ:значение, со связанными операциями, рассмотрите возможность их переноса в класс.Но формально документально подтвержденный доц.array может вам подойти.Зависит от вашего стиля и типа данных.Здесь важно структурирование методов работы с данными и документация.На самом деле не имеет значения, сделаете вы это классом или нет.
  • После того, как вы выполнили вышеуказанные шаги, разбейте вновь написанные функции и объекты на отдельные включаемые файлы.Я склонен заключать большую часть всего в один класс, поэтому у меня в основном есть один класс pr.файл.Но некоторые вспомогательные классы используют общий файл с основным классом и т. д.Вы почувствуете это.

Другие советы

На вашем месте я бы начал с написания тестового кода.

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

PHPUnit возможно, было бы неплохо начать с этого.

Если я вас правильно понимаю, у вас есть циклы foreach (и тому подобное), вложенные в 4 страницы, и вы задаетесь вопросом, может ли вам помочь эта объектно-ориентированная вещь, о которой вы слышали.

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

ООП — это способ структурирования вашего кода, позволяющий поместить определения структур данных рядом с кодом, который манипулирует этими структурами данных.Хотя одна из его ключевых целей — повысить читаемость за счет инкапсуляции сложности, объектно-ориентированный подход — не единственный способ сделать это.

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

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

Но не позволяйте незнанию объектно-ориентированного программирования помешать вам вытащить внутренний код из циклов и поместить его в одноцелевые функции.

(Если я неправильно понял ваш уровень объектно-ориентированных знаний, прошу прощения.)

Начинайте медленно.реорганизуйте его по частям.

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

Несколько хороших советов от Джонатана и Гнуда.Не беспокойтесь так сильно о SPL, и узнать больше о рефакторинге, и посмотрите, что инструменты рефакторинга доступны для PHP.

Также я не могу рекомендовать достаточно читать Эффективная работа с устаревшим кодом:

alt text

И, конечно же, канонический Книга по рефакторингу:

альтернативный текст http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU01_.jpg

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top