Changelog - Version 7.0
Status: in development. This document tracks changes landing on the
7.0branch. Nothing here is released yet, and the contents may still change.
Breaking Changes
-
The output of every language changed. The words were produced by a single table-driven algorithm shared by all languages, which could not follow the grammar of any of them. Each language now writes numbers by its own rules:
Before Now English twenty one,fourty,eigthty,two thousands,one thousand and one hundred and eleven,one miliontwenty-one,forty,eighty,two thousand,one thousand one hundred and eleven,one millionPortuguese vinte um,tres,um mil e um,um mil e cento e onze,um milhaovinte e um,três,mil e um,mil cento e onze,um milhão de reaisItalian uno euro,venti uno,diciasette,mille e uno(for 101),uno mille e mille e undici(for 1111)un euro,ventuno,diciassette,centouno,millecentoundiciApplications that store or compare the written text must expect the new forms.
-
WordNumberInterfacenow declares onlywrite(float $number): string. The table methods (unit(),elevenToNineteen(),twentyToNinety(),hundreds(),oneHundred(),tens()) are gone, as is the protectedBase::process(), andcurrency()andconcatWord()are now protected methods ofBase. A custom language extendsBaseand implementscurrency(),concatWord(),zero()andintegerToWords(int $number); seedocs/creating-languages.md. -
write()throwsInvalidArgumentExceptionfor a negative number or one at or aboveBase::LIMIT(one quadrillion). Before, a negative number returned an empty string and a larger one failed with an undefined array offset.
Bug Fixes
- An amount below one is written in cents:
write(0.5)returnsfifty cents; it used to returnzero dollars. - A round thousand or more is separated from the currency:
write(2000)returnstwo thousand dollars; it used to returntwo thousandsdollars(andum milhaoreaisin Portuguese).
Requirements
- PHP 8.3, 8.4, 8.5 and 8.6 are now supported:
"php": ">=8.3 <8.7". The previous<8.6upper bound excluded PHP 8.6, since<8.6is exclusive.
Toolchain
-
PHPUnit updated to
^12.5. -
Psalm is installed as
psalm/phar(^6.16) instead ofvimeo/psalm.vimeo/psalmlists the PHP versions it supports and no published release includes 8.6, so as a dev dependency it madecomposer installfail on the 8.6 build job before any test ran.psalm/pharrequires onlyphp ^8.2and bundles its own dependencies, so it installs on every PHP version in the matrix and cannot conflict with the project's. Psalm itself still refuses to run on 8.6, which is why the Psalm job uses 8.5.composer psalmruns it.PHPUnit 13 is deliberately not used. It requires PHP
>=8.4.1, which would break the 8.3 floor.
Continuous Integration
- The build matrix now includes PHP 8.6.
- The Psalm job now runs on PHP 8.5. Psalm declares
~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0and therefore does not run on PHP 8.6.
Housekeeping
phpunit.xml.distrenamed tophpunit.xml.- The
LICENSEfile is now the MIT license, the onecomposer.jsonhas always declared. The file previously carried the GPL v3 text by mistake.