PHP использование параметров функции по умолчанию не по порядку
Есть функция:
function button($text, $value, $col = 6, $row = 1, $color = "#ffffff", $size = 'large', $type = 'reply'){
return [
'Columns' => $col,
'Rows' => $row,
'Text' => '<font color="'.$color.'"><b>'.$text.'</b></font>',
'BgColor' => "#30cecb",
'TextVAlign' => 'middle',
'TextHAlign' => 'middle',
'TextSize' => $size,
'ActionType' => $type,
'ActionBody' => $value,
];
}
Каким образом я могу задать параметр "color" не задавая параметров col и row? При вызове:
button('button', 'but|run', NULL, NULL, "#ffffff")
Не будет использоваться аргумент по умолчанию, а просто ему передастся NULL. Каким образом можно задать какой-либо параметр после тех что задаются по умолчанию, но в тех что перед ним не менять значение?
Ответы (1 шт):
До php версии 8 твоя проблема не решаема никак.
В восьмерке появились именованные аргументы, позволяющие указывать только нужные аргументы и даже в любом порядке, пример работы здесь, внимание на вывод по версиям
function button($text, $value, $col = 6, $row = 1, $color = "#ffffff", $size = 'large', $type = 'reply'){
return [
'Columns' => $col,
'Rows' => $row,
'Text' => '<font color="'.$color.'"><b>'.$text.'</b></font>',
'BgColor' => "#30cecb",
'TextVAlign' => 'middle',
'TextHAlign' => 'middle',
'TextSize' => $size,
'ActionType' => $type,
'ActionBody' => $value,
];
}
print_r(button(text:'Text here', color:'#333333', value:'value here'));
Но если функцию можно отредактировать, то можно передавать в нее аргумент в виде массива, например:
function button(array $buttonParameters) {
return [
'Columns' => $buttonParameters['col'] ?: 1,
'Rows' => $buttonParameters['row'] ?: 6,
// ...
'ActionBody' => $buttonParameters['value'] ?: 'Default value',
];
}
Однако это ухудшает понимание кода, так как кроме разработчика (а через месяц и он забудет) никто не знает, какие ключи массива надо передавать.