Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 05.05.2012
Сообщений: 159

Сделать рефакторинг кода

04.07.2016, 12:09. Показов 710. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите сделать рефакторинг кода:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$dest = $_POST['destination'];
$result = $_POST['data']['result'];
$output = "";
 
if ($dest == 'file') {
    $file = fopen('storage.txt', 'a+');
    fwrite($file, $result);
    $output = "stored in file";
} elseif ($dest == 'db') {
    $db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user', 'pass');
    $db->exec("INSERT INTO storage (value) VALUES ('{$result}');");
    $output = "stored in db";
}
 
echo $output;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2016, 12:09
Ответы с готовыми решениями:

Как сделать функцию из кода???
Как сделать функцию из кода??? set_time_limit (0); $url=&quot;http://work1.ru/menu.txt&quot;; $cont=file_get_contents($url); ...

Как из кода сделать функцию
Здравствуйте, извиняюсь за такой вопрос. Как из этого кода $url = 'http://site.ru/'; $ch = curl_init(); curl_setopt($ch,...

Сделать функцию с куска кода
Есть работающий следующий код - include (&quot;bd.php&quot;); if ($pattern) { $insert = &quot;INSERT INTO `pattern` (`name` ,...

3
22 / 22 / 5
Регистрация: 05.06.2015
Сообщений: 188
04.07.2016, 12:31
Как-то так, но тут особо и рефакторить нечего. Но я могу ошибаться.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$dest = $_POST['destination'];
$result = $_POST['data']['result'];
$output = "";
 
function save_in_file($result)
{
    $file = fopen('storage.txt', 'a+');
    fwrite($file, $result);
    return 'stored in file';
}
 
function save_in_db($result)
{
    $db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user', 'pass');
    $db->exec("INSERT INTO storage (value) VALUES ('{$result}');");
    return 'stored in db';
}
 
Switch($dest)
{
    case 'file' : echo save_in_file($result); break;
    case 'db' : echo save_in_db($result); break;
}
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
04.07.2016, 14:36
Вот что у меня вышло:
PHP
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
 
interface IStorage {
    function open($conf);
    function write($data);
}
 
interface IMessage {
    function message();
}
 
trait MessageTrait {
    private $message = '';
    function message() {
        return $this->message;
    }
    protected function set_message($message) {
        $this->message = $message;
    }
}
 
trait ConfigTrait {
    private $config = [];
    protected function is_configured($key) {
        return array_key_exists($key, $this->config);
    }
    protected function get_config($key) {
        return $this->config[$key];
    }
    protected function set_value($key, $value) {
        $this->config[$key] = $value;
    }
    protected function set_config($config) {
        $this->config = $config;
    }
}
 
class FileStorage implements IStorage, IMessage {
    use MessageTrait;
    use ConfigTrait;
    function write($data) {
        $file_name = $this->get_config('fileName');
        $file = fopen($file_name, 'a+');
        fwrite($file, $data);
        fclose($file);
        $this->set_message("stored in file");
    }
 
    function open($conf) {
        $this->set_config($conf);
    }
}
 
class DbStorage implements IStorage, IMessage {
    use MessageTrait;
    use ConfigTrait;
    function write($data) {
        $db = $this->get_config('instance');
        $db->exec("INSERT INTO storage (value) VALUES ('{$data}');");
        $this->set_message("stored in db");
    }
 
    function open($conf) {
        $this->set_config($conf);
        if (!$this->is_configured('instance')) {
            $this->set_value(
                'instance',
                new PDO(
                    $this->get_config('dsn'),
                    $this->get_config('user'),
                    $this->get_config('pass')
                )
            );
        }
    }
}
 
class StorageFabric {
    static private $cache = [];
    static private $config = [];
    public static function setConfig($config) {
        self::$config = $config;
    }
    /**
     * @return IStorage
     */
    public static function getStorage($type) {
        $type = strtolower($type);
        if (!array_key_exists($type, self::$config)) {
            throw new RuntimeException('Wrong storage Type:'.$type.
                                       '; In config: '.
                                       json_encode(array_keys(self::$config))
            );
        }
        if (empty(self::$cache[$type])) {
            $class_name = $type . 'Storage';
            $class_name{0} = strtoupper($type{0});
            /** @var IStorage $tmp */
            $tmp = new $class_name;
            $tmp->open(self::$config[$type]);
            self::$cache[$type] = $tmp;
        }
        return self::$cache[$type];
    }
}
 
StorageFabric::setConfig([
    'file' => [
        'fileName' => 'storage.txt'
    ],
    'db'   => [
        'dsn'  => 'mysql:dbname=testdb;host=127.0.0.1',
        'user' => 'user',
        'pass' => 'pass'
    ],
]);
 
$dest = $_POST['destination'];
$result = $_POST['data']['result'];
/** @var IStorage|IMessage $store */
$store = StorageFabric::getStorage($dest);
$store->write($result);
 
echo $store->message();
2
22 / 22 / 5
Регистрация: 05.06.2015
Сообщений: 188
04.07.2016, 14:42
Cra3y,

Не по теме:

Я полагаю это максимально ООПшный вариант рефактора? если так, то это, мать его, круто выглядит! Буду учиться так же!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.07.2016, 14:42
Помогаю со студенческими работами здесь

Как сделать запись кода компактнее?
if (isset($_GET)) { $ref = scandir($_GET); $a = references ($ref, 1, $dir); } else { $ref = scandir('.'); $a =...

Как сделать построчную отладку кода?
Например есть CodeLobster ? там все прекрасно сделано и переменные я могу в любой момент времени посмотреть и классы/методы, в общем есть...

Как сделать проверку кода изображенного на капче
Всем привет! Есть файл index.php в котором есть кнопка &quot;Обновить&quot; и капча, которая обновляется. &lt;img src=&quot;/capcha.php&quot;...

Как сделать независимое выполнение нескольких фрагментов кода?
В базе данных есть несколько записей, содержащих php код. Этот код нужно выполнить независимо. То есть один код никак не должен влиять на...

Рефакторинг кода.
Доброго всем дня. помогите упростить кусок кода с if. Первая секция - две строки При нажатии на каждую - раскрываются в список, при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru