On Tue, 17 Jan 2023, G. P. B. wrote: > I would like to start the discussion about the Saner > array_(sum|product)() RFC: > https://wiki.php.net/rfc/saner-array-sum-product > > Currently, the array_sum() and array_product() behave differently than > their userland implementation as they ignore arrays and objects, and > cast the remaining types to int/float. This is in contrast with the > behaviour of arithmetic operators that throw TypeErrors on types and > values that are not interpretable as int/float. > > This RFC aims to resolve this discrepancy.
I think I agree with the premise of this RFC, but I do think a few details are wrongly addressed. First of all, a clarification why this produces int(4) would be useful: $input = [true, STDERR, new stdClass(), [], gmp_init(6)]; $output = array_sum($input); I had to look up that STDERR would cast to int(3) :-) I don't understand why this would result in a warning and a return of int(50): $a = [10, 15.6, gmp_init(25)]; var_dump(array_sum($a)); Why doesn't this return float(50.6) instead? I realise that the array_reduce variant (below) does the same, but it's not what I would expect: <?php $input = [10, 15.6, gmp_init(25)]; $output = array_reduce($input, fn($carry, $value) => $carry + $value, 0); I think the phrase "If traversing the array transforms the return value into an object, if that object is not numerically castable an E_WARNING is emitted and the initial return value is returned instead, which may change the return value if scalar values were present in the array. " should come with an example :-) cheers, Derick -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php