Аргументы функций по умолчанию в динамических языках
- Опубликовано:
Динамические языки программирования в целом и PHP в частности позволяют задавать значения по умолчанию для параметров функций и методов.
Можно указывать значения по умолчанию непосредственно в списке параметров:
function example($foo = 5, $bar = 'test') {
// ...
}
Но тогда в случае, если необходимо пропустить параметр (а ведь именно для этого и нужны значения по умолчанию), программист вынужден вспоминать, каково же значение по умолчанию для пропускаемого параметра, либо открывать документацию по конкретной функции. На практике это недостаточно удобно.
Поэтому можно поступить иначе: в качестве формальных значений по умолчанию всегда использовать значение null
, а реальные значения по умолчанию инициализировать уже внутри функции:
function example($foo = null, $bar = null) {
if (null === $foo) {
$foo = 5;
}
if (null === $bar) {
$bar = 'test';
}
// ...
}
Тогда для пропуска любого необязательного параметра достаточно будет указать в качестве его значения унифицированное значение null
:
example(null, 'qwerty');
Если же параметров у функции становится слишком много, имеет смысл рассмотреть вариант использования именованных параметров как элементов ассоциативного массива, являющегося единственным (или последним из двух-трёх обязательных либо используемых наиболее часто) формальным параметром функции:
function example($options) {
$foo = array_key_exists('foo', $options)
? $options['foo']
: 5;
$bar = array_key_exists('bar', $options)
? $options['bar']
: 'test';
// ...
}