powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как избежать громадных CASE'ов
9 сообщений из 9, страница 1 из 1
как избежать громадных CASE'ов
    #35731817
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит стоит такая задача. приходят куча параметров, в зависимости от них надо выполнять дейсвия. Вот пока типичный пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
switch($arr[ 2 ])
	     {
	       case "mytasks":
           case "tasksfromme":
           case "uniontasks":
           case "archive_tasks_grid":
           case "formycontrol":
	         {
               header('Location: /user/tasksreports_grid/'.$arr[ 2 ].'/');
	           exit();
	         }
		   case "tasksreports_grid" :
		     {
			   include_once($incpath."/tasksreports_grid.php");
           	   exit();
		     }
  				/*
			case "install" :{
				$install = true;
	    		include_once($incpath."/setcontact.php");
	     	  	exit();
	     	  }*/
	     	  case "employer2address_book" :{
	    		include_once($incpath."/employer2address_book.php");
	     	  	exit();
	     	  }
и так еще 2 тыщи строчек.
как избежать громадных CASE'ов при этой проверке?
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35731861
Фотография Asm64D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowЗначит стоит такая задача. приходят куча параметров, в зависимости от них надо выполнять дейсвия. Вот пока типичный пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		   case "tasksreports_grid" :
		     {
			   include_once($incpath."/tasksreports_grid.php");
           	                         exit();
		     }
  				....
	     	  case "employer2address_book" :
                          {
	    		include_once($incpath."/employer2address_book.php");
	     	  	exit();
	     	  }

Я насколько вижу у тебя некоторые case практически равны include_once + расшерение php, значит сделать case для тех где требуется особая обработка. А на defaut поставить
Код: plaintext
include_once(...$arr[ 2 ]+".php");
Ну вообще зависит от задачи, может ты там что-то сильно наворотил.
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35731868
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторinclude_once(...$arr[2]+".php");
это понятно. но это просто как пример. меня интересует вопрос кто как делает обработку вот таких вещей.. когда пришел параметр с кучей возможных значений.
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35731933
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chain of Responsibility
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35733543
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow пишет:

> Значит стоит такая задача. приходят куча параметров, в зависимости от
> них надо выполнять дейсвия. Вот пока типичный пример:

Поищи на RSDN.ru, в С++ кажется (не в прикладном С++).
Обсуждали примерно месяц - два назад
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35734595
Фотография darkbird81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторinclude_once(...$arr[2]+".php");
это понятно. но это просто как пример. меня интересует вопрос кто как делает обработку вот таких вещей.. когда пришел параметр с кучей возможных значений.

хм.. ну например создать массив порядковых значений и в цикле перебирать их по номеру
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35735146
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
...
и так еще 2 тыщи строчек.
как избежать громадных CASE'ов при этой проверке?
Попробуй стельнуть из пушки по мелким птичкам. Примени шаблон "Repace Contitional with Polymorphism" (c).
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35735174
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть в пхп указатели на функцию в каком-либо виде?
если есть, то можно слепить ассоциативный массив ["команда", "функция"].
...
Рейтинг: 0 / 0
как избежать громадных CASE'ов
    #35735492
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1: использать break;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
switch($arr[ 2 ]){

case 'mytasks':
case 'taskfromme':
case 'uniontasks':
case 'archive_tasks_grid':
case 'formycontrol':
header('Location: /user/tasksreports_grid/'.$arr[ 2 ].'/');
exit();
break;

case 'tasksreports_grid'":
case 'employer2address_book':
include_once($incpath."/".$arr[2].".php");
exit();
break;

}
Вариант 2: вариант egorych
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$mass=Array('mytasks'->'header',
                         'taskfromme'->'header',
                         'uniontasks'->'header',
                         'archive_tasks_grid'->'header',
                         'formycontrol'->'header',
                         'tasksreports_grid'->'include_once',
                         'employer2address_book'->'include_once');

if(array_key_exists($arr[ 2 ],$mass)){
	switch($mass[$arr[ 2 ]]){
	case 'header':
	header('Location: /user/tasksreports_grid/'.$arr[ 2 ].'/');
	exit();
	break;
	
	case 'include_once':
	include_once($incpath."/".$arr[ 2 ].".php");
	exit();
	break;
	}
	}else{
	die('Для данного значение не найден обработчик');
	}
Вариант 3: хранить все в разных файлах
А так по идеи таких нереальных кейсов в пару тышь штук не должно быть...
Пробуйте все раскидать в разные файлы.
К примеру у меня на сайте всего 1 страничка каторая выводит абсолютно все:
Код: plaintext
1.
2.
3.
4.
5.
6.
<?php
$loader= new loader();
$body=new body();
$body->init();
$loader->load(isset($_GET['event'])?$_GET['event']:'news');
$body->draw();
?>
Лоадер в зависимости от того че запрошено в event подключает нужный файл с классом, а тот при инициализации сам все делает.
Вот и case во много раз упростился. А если бы делал все в одном файле то давно уже бы запутался...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как избежать громадных CASE'ов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]