Рефакторю код по экспорту в ХМЛ
Код добавляет в ХМЛ ноды
$login->addChild('login_date', $dat['login_date']);
$login->addChild('mac', $dat['mac']);
$login->addChild('access_point', $dat['access_point']);
//и ещё строк 10-15 в том же ключе
Внутренний перфекционист кричит, что 15 одинаковых строк - это #говнокод и надо это заменить на
foreach ($dat as $key => $value) {
$login->addChild($key, $value);
}
Правда всегда есть риск, что некто злонамеренный (папиредники) сделал какую-то херню в духе
$login->addChild('mac', $dat['mac_address']);
и тогда всё в огне
Руками эту муть перебирать лень да и если попадется что вроде "cpdId", то точно пропустишь
И нас спасает regexp при чем простой как двери
~('.+?').+\1~
который подсветит всем строки в которых есть
'.+?' - символы в кавычках
.+ - потом какие-то ещё символы --
\1 - а потом то, что было найдено в первой группе в скобках
Но мы немного усложним задачу и проверим точно ли везде простое присваивание выражение приобретает вид
('.+?'), \$dat\[\1
* - в последнем варианте нет ~~ потом что мы используем регулярное выражение в поиске ИДЕ, а не собственно в коде
Код добавляет в ХМЛ ноды
$login->addChild('login_date', $dat['login_date']);
$login->addChild('mac', $dat['mac']);
$login->addChild('access_point', $dat['access_point']);
//и ещё строк 10-15 в том же ключе
Внутренний перфекционист кричит, что 15 одинаковых строк - это #говнокод и надо это заменить на
foreach ($dat as $key => $value) {
$login->addChild($key, $value);
}
Правда всегда есть риск, что некто злонамеренный (папиредники) сделал какую-то херню в духе
$login->addChild('mac', $dat['mac_address']);
и тогда всё в огне
Руками эту муть перебирать лень да и если попадется что вроде "cpdId", то точно пропустишь
И нас спасает regexp при чем простой как двери
~('.+?').+\1~
который подсветит всем строки в которых есть
'.+?' - символы в кавычках
.+ - потом какие-то ещё символы --
\1 - а потом то, что было найдено в первой группе в скобках
Но мы немного усложним задачу и проверим точно ли везде простое присваивание выражение приобретает вид
('.+?'), \$dat\[\1
и мы видим
что
а) в одном месте у нас обработка спецсимволов
б) в остальных местах имя поля на входе и выходе совпадает* - в последнем варианте нет ~~ потом что мы используем регулярное выражение в поиске ИДЕ, а не собственно в коде
Комментариев нет:
Отправить комментарий