Как убрать дублирование кода в этом PHP-коде?

Есть хороший способ удалить дублирование в этом коде:

        if ($design->unit_system=="English")
{
define('LIMIT_AF', '200');
define('LIMIT_BF', '0');
define('LIMIT_CM', '50');
define('LIMIT_DB', '50');
define('LIMIT_FB', '100');
}
else if ($design->unit_system=="Metric")
{
define('LIMIT_AF', convert(200, 'gpm', 'm3h'));
define('LIMIT_BF', convert(0, 'gpm', 'm3h'));
define('LIMIT_CM', convert(50, 'gpm', 'm3h'));
define('LIMIT_DB', convert(50, 'psi', 'bar'));
define('LIMIT_FB', convert(100, 'psi', 'bar'));
}

Я изо всех сил пытаюсь понять, будет ли какое-либо усилие более сложным, чем то, что я имею сейчас.

1

Решение

Что насчет этого — обновлено в соответствии с правками OP:

$constants = array(
'LIMIT_AF' => array(200, 'gpm', 'm3h'),
'LIMIT_BF' => array(0, 'gpm', 'm3h'),
'LIMIT_CM' => array(50, 'gpm', 'm3h'),
'LIMIT_DB' => array(50, 'psi', 'bar'),
'LIMIT_FB' => array(100, 'psi', 'bar'),
);

foreach($constants as $key => $info){
if($design->unit_system=="English"){
define($key, $info[0]);
}elseif($design->unit_system=="Metric"){
define($key, convert($info[0], $info[1], $info[2]));
}
}
2

Другие решения

Это мне кричит «файл конфигурации».

В качестве альтернативы, вы можете поместить значения в массив, а затем обработать их после:

$settings=array('LIMIT_AF'=>200,...);
foreach ($settings as $name=>$value) {
if (design->unit_system=="English") {
define($name,$value);
} else if ($design->unit_system=="Metric") {
define($name,convert($value,'gpm','m3h'));
} else {
## DONT FORGET TO THROW AN EXCEPTION rather than have these undefined!
}
}
1