Имеется конструкция switch-case со множеством вариантов. Каким образом создать компонентно-ориентированный и легко масштабируемый архитектурный аналог?
Например:
<?php
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
//Here Handle GET Request
getHandle();
break;
case 'POST':
//Here Handle POST Request
postHandle();
break;
case 'DELETE':
//Here Handle DELETE Request
deleteHandle();
break;
case 'PUT':
//Here Handle PUT Request
putHandle();
break;
}
?>
Это работает не только в php. Для каждой большой конструкции switch-case уместно создавать ассоциативный массив из обработчиков. Переменная, хранящая "состояние", подставляется в ключ массива и вызывается соответствующий обработчик.
Получаем переменную, храняющую "состояние"
$method = $_SERVER['REQUEST_METHOD'];
Пишем обработчики
function getHandle(){
echo "get запрос";
}
function postHandle(){
echo "post запрос";
}
function putHandle(){
echo "put запрос";
}
function deleteHandle(){
echo "delete запрос";
}
Ассоциативный массив из ссылок на обработчики. Подробнее о переменных функций.
$httpArr = array(
'GET' => 'getHandle',
'POST' => 'postHandle',
'PUT' => 'putHandle',
'DELETE' => 'deleteHandle'
);
Вызов нужного обработчика
$httpArr[$method]();
В js можно создать ссылку на функцию в виде переменной. Затем поместить переменную в массив. И вызывать функцию прямо из массива. Тут такой же принцип. Грубо говоря, $httpArr - это массив функций.
P.S. Тестил для php версии 7.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
В чём суть каждого из спецификаторов? И почему в данном коде я не могу получить доступ к переменной i ,так как по определению static хранит значение...