Как switch вынести в отдельный файл?

314
03 мая 2017, 12:08

Можно ли switch вынести в отдельный файл, учитывая то, что он находится в другом switch? Просто в основном файле получается слишком много кода, хотелось бы его пораскидать по разным файлам. include не работает. Пример:

<?php  
 
//Тут получение JSON файла  
 
switch ($data->type) {  
  //Если это уведомление для подтверждения адреса сервера...  
  case 'confirmation':  
    echo $confirmation_token;  
    break;  
 
  case 'message':  
  //switch ниже как раз и нужно вынести в отдельный файл, если использовать include, то не работает 
    switch($message) { 
       case 1: echo $q1; break; 
       case 2: echo $q2; break; 
       case 3: echo $q3; break; 
     } 
break;  
} 

Answer 1

В том, чтобы вынести конструкцию switch в отдельный файл и включить ее в с помощью include нет никакой сложности. Проблема в том, что это в принципе плохой подход.

допустим ваш основной файл index.php:

$data = ['type' => 'message'];
$message = 2;
switch($data['type']){
    case 'confirmation':  echo $confirmation_token; break;
    case 'message':.
            include "./switch_messages.php";
            break;
}

и дополнительный файл switch_messages.php следующего вида:

<?php
    list($q1, $q2, $q3) = ['q1 value', 'q2 value', 'q3 value'];
    switch($message){
        case 1 : echo $q1; break;
        case 2 : echo $q2; break;
        case 3 : echo $q3; break;
    }

Вы, наверное, тут должны понимать, что последний switch можно представить в виде:

$data = [1 => $q1, 2 => $q2, 3 => $q3];
echo $data['message'];

и обойтись вообще без switch. Возможно, предварительно надо проверить наличие искомого ключа в массиве и т.п.

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

require_once("process_messages.php");
$data = ['type' => 'message'];
$message = 2;
switch($data['type']){
    case 'confirmation':  echo $confirmation_token; break;
    case 'message':.
            processMessage($message);
            break;
}

где process_messages.php: witch_messages.php` следующего вида:

<?php
    function processMessage($message){
        list($q1, $q2, $q3) = ['q1 value', 'q2 value', 'q3 value'];
        switch($message){
            case 1 : echo $q1; break;
            case 2 : echo $q2; break;
            case 3 : echo $q3; break;
        }
    }

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

Answer 2

Легко. Делаем файл например "json_processor.php" В него запиливаем функцию а-ля:

function parse_json($data)

В тело функции все твои свичи. Затем вызываеш эту функцию. Вот и готово.

READ ALSO
sha256 C# PHP почему разные хэши?

sha256 C# PHP почему разные хэши?

Сразу предупреждаю, в С# я не понимаю но как я понял должно было бы быть так $hash = hash_hmac('sha256',$password,$salt,true);

288
функция ofstream c++

функция ofstream c++

Как реализовать чтобы при каждой новой итерации цикла с функцией ofstream менялось название файлаtxt

289
Почему ругается компоновщик?

Почему ругается компоновщик?

В чём проблема? Проясните пожалуйста нубуВ первый раз создаю многофайловый проект

278
Получение ответа от QProcess

Получение ответа от QProcess

Необходимо запустить дочерний процесс, вводить и выводить данные из него последовательноОднако, если дочерний процесс имеет цикл ввода,...

459