Замена switch-case

210
22 января 2018, 08:52

Имеется конструкция 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;
}
?>
Answer 1

Это работает не только в 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.

READ ALSO
Кнопка в кнопке php

Кнопка в кнопке php

ЗдравствуйтеПишу код на добавление строчки в базу

251
Спецификаторы хранения extern,static,register,auto

Спецификаторы хранения extern,static,register,auto

В чём суть каждого из спецификаторов? И почему в данном коде я не могу получить доступ к переменной i ,так как по определению static хранит значение...

253
Constexpr локальные переменные

Constexpr локальные переменные

Пусть имеется такой код:

278