Concept¶
This section introduces the concept and basic features of the library
Type Safety¶
This library abstracts concepts around Money, although with minimal run-time validation. We attempt to leverage PHP 8’s type system as much as possible, but sometimes you will encounter string parameters that are documented as being numeric-string: should you encounter these, it means that the contained value must be a string that passes an assert(is_numeric(<your-string>)) check.
Specifically, be aware that numeric-string is used in order to guarantee that large numeric values (larger than PHP_INT_MAX or smaller than PHP_INT_MIN), as well as precise fractional values are not approximated unless requested to do so: cast a numeric-string to an int or float at your own risk.
It is strongly advised that you use a type-checker when interacting with this library.
Compatible type-checkers are:
Warning
If you fail to guarantee type-safety when interacting with this library, especially around numeric-string passed as parameter to methods of its API, then these values will likely be accepted, producing late production crashes. Make sure you run a type-checker!
Immutability¶
Jim and Hannah both want to buy a copy of book priced at EUR 25.
use Money\Money;
$jimPrice = $hannahPrice = Money::EUR(2500);
Jim has a coupon for EUR 5.
$coupon = Money::EUR(500);
$jimPrice->subtract($coupon);
Because $jimPrice
and $hannahPrice
are the same object, you’d expect Hannah to now have the reduced
price as well. To prevent this problem, Money objects are immutable. With the code above, both
$jimPrice
and $hannahPrice
are still EUR 25:
$jimPrice->equals($hannahPrice); // true
The correct way of doing operations is:
$jimPrice = $jimPrice->subtract($coupon);
$jimPrice->lessThan($hannahPrice); // true
$jimPrice->equals(Money::EUR(2000)); // true
JSON¶
If you want to serialize a money object into a JSON, you can just use the PHP method json_encode
for that.
Please find below example of how to achieve this.
use Money\Money;
$money = Money::USD(350);
$json = json_encode($money);
echo $json; // outputs '{"amount":"350","currency":"USD"}'