Я пишу приложение PHP, которое имеет дело с денежными величинами. Для этой цели я использую объект BigDecimal
из библиотеки Brick \ Math . Этот объект позволяет точные представления денежных значений и точные операции с ними. Чтобы создать объект BigDecimal
из string
, int
или float
, мне нужно вызвать метод BigDecimal::of
, например:
BigDecimal::of('1.25');
Теперь скажем, что У меня есть следующий метод:
function withdraw_currency(string $currency, BigDecimal $amount);
Если я захочу его вызвать, мне часто придется создавать объект BigDecimal
, например:
withdraw_currency('USD', BigDecimal::of('1.25'));
Я считаю это ужасным читать. Совершенно не кажется чистым. Становится хуже, если для метода требуется более одного параметра BigDecimal
. Я вызываю этот метод несколько раз, каждый раз с новым объектом BigDecimal
.
Я думал об этом:
$amount = BigDecimal::of('1.25');
withdraw_currency('USD', $amount);
Это, безусловно, более читабельно, но похоже, что метод должен вызываться в одной строке.
Я также подумал об изменении метода withdraw_currency
, чтобы параметр $amount
был a string
вместо BigDecimal
. Тогда $amount
будет преобразовано в объект BigDecimal
внутри метода; или, другими словами, это "скрыло бы" уродство от программиста.
Тогда метод может быть вызван так:
withdraw_currency('USD', '1.25');
Это выглядит чистым, но кажется неправильным, так как вводит программиста в заблуждение, заставляя думать, что метод имеет дело со строкой, когда, на самом деле, он имеет дело с объектом BigDecimal
.
Кажется, что нет идеального ответа, но мне нужен был вклад других программистов. Каким будет наиболее "чистый" способ работы с объектом BigDecimal
в этой ситуации?