====== PHP RFC: Allow int type argument to BCMath function ====== * Version: 0.9 * Date: 2024-07-08 * Author: Saki Takamachi (saki@php.net) * Status: Under Discussion * First Published at: https://wiki.php.net/rfc/allow_int_args_to_bcmath_function ===== Introduction ===== Currently, BCMath functions only accept values ​​as strings. If want to calculate an int type with BCMath, need to convert it to a string once, which incurs unnecessary conversion costs. ===== Proposal ===== This RFC proposes adding an int type to the BCMath function argument and making the argument a union type of int and string. That is, the function signature changes to: function bcadd(int|string $num1, int|string $num2, ?int $scale = null): string {} function bcsub(int|string $num1, int|string $num2, ?int $scale = null): string {} function bcmul(int|string $num1, int|string $num2, ?int $scale = null): string {} function bcdiv(int|string $num1, int|string $num2, ?int $scale = null): string {} function bcmod(int|string $num1, int|string $num2, ?int $scale = null): string {} function bcpowmod(int|string $num, int|string $exponent, int|string $modulus, ?int $scale = null): string {} function bcpow(int|string $num, int|string $exponent, ?int $scale = null): string {} function bcsqrt(int|string $num, ?int $scale = null): string {} function bccomp(int|string $num1, int|string $num2, ?int $scale = null): int {} function bcround(int|string $num, int $precision = 0, int $mode = PHP_ROUND_HALF_UP): string {} Note that even if the only numbers passed as arguments are ints, the return value will always be a string. I do not change anything for the following three functions. bcscale() is not a calculation function, so exclude it. bcfloor() and bcceil() are excluded because there is no point in allowing int type arguments due to the characteristics of their functions. function bcscale(?int $scale = null): int {} function bcfloor(string $num): string {} function bcceil(string $num): string {} ===== Backward Incompatible Changes ===== Any code that uses strict types and expects an error to occur when passing an int to these functions is affected because the error no longer occurs. ===== Proposed PHP Version(s) ===== next PHP 8.x (8.4) ===== RFC Impact ===== ==== To SAPIs ==== None. ==== To Existing Extensions ==== Only BCMath. ==== To Opcache ==== None. ==== New Constants ==== None. ==== php.ini Defaults ==== None. ===== Open Issues ===== None. ===== Unaffected PHP Functionality ===== There is no effect on anything other than BCMath. ===== Future Scope ===== None. ===== Proposed Voting Choices ===== There is a yes/no choice whether to accept this RFC and requires a 2/3 majority vote to be accepted. ===== Patches and Tests ===== yet ===== Implementation ===== yet ===== References ===== https://externals.io/message/123924 ===== Rejected Features ===== None.