У меня есть PHP-файл с 9000 строками, который состоит из примерно 30 отдельных областей, в которых отображаются переменные $_POST
. Так что можно быть ...
elseif (isset($_POST['view_user'])
|| isset($_POST['edit_user'])
|| isset($_POST['process_user_status']))
... и так далее. Вероятно, у меня есть около 75 точек входа в эти тридцать областей, все из которых обрабатываются длинными цепочками других типов, как указано выше.
Я думал об изменении этого на что-то более вменяемое. Идеи, которые я придумала до сих пор:
1) Сложите сообщения до логического значения и используйте их в цепочке elseif. Таким образом, вышеприведенное будет сводиться к elseif ($area_user)
, при этом $area_user
будет установлено на true
, если будет установлен какой-либо из $_POST
выше. Но на самом деле это не решает проблему сложности.
2) Варианты использования вместо elseif. Таким образом, вышесказанное станет ...
case (isset($_POST['view_user'])):
case (isset($_POST['edit_user'])):
case (isset($_POST['process_user_status'])):
do stuff;
break;
Но, опять же, хотя он и удаляет синтаксис elseif, он просто заменяет его чем-то, что, хотя и немного более управляемым, может все еще скрывать истинную проблему.
3) Используйте функции. Так что в верхней части страницы у меня есть похожий оператор switch, но вместо того, чтобы быть в середине страницы, идущей прямо в область скрипта, он вызывает функцию, поэтому вместо «делать вещи» он может вызвать UserArea($_POST['whatever'])
. Преимущество этого заключается в перемещении всех $_POST
переменных за пределы сценария и их концентрации в навигации и вызовах функций. Однако для этого потребуется множество объявлений глобальных функций, которые в данный момент мне не нужны, поскольку ветви elseif находятся в глобальной области видимости.
4) Рефакторинг полностью с полным разделением MVC, шаблонами и т. Д. Хотелось бы, но не вариант в данный момент. Просто будьте счастливы, что у меня откололась модель, но на данный момент вид и контроллер должны сосуществовать.
Поскольку я писал это, я все больше убеждаю себя в 3, но я хотел посмотреть, что думают вы, добрые люди. Какой должна быть лучшая практика навигации в такой ситуации?