Description
The following code:
<?php
class MyString {
function __toString() {
return "2";
}
}
$a = new BCMath\Number("1");
$b = new MyString();
var_dump($a + $b, $b);
Resulted in this output:
object(BcMath\Number)#2 (2) {
["value"]=>
string(1) "3"
["scale"]=>
int(0)
}
string(1) "2"
But I expected this output instead:
object(BcMath\Number)#2 (2) {
["value"]=>
string(1) "3"
["scale"]=>
int(0)
}
object(MyString)#2 (0) {
}
Note that this even happens in strict typing mode, where it may not even be expected that the addition succeeds.
Anyhow, the problem is that zend_parse_arg_str_or_long_slow() converts the passed arg.
Also note that GMP also uses ZPP functionality, but catches any such type conversion, even in coercive typing mode.
PHP Version
PHP 8.4
Operating System
any
Description
The following code:
Resulted in this output:
But I expected this output instead:
Note that this even happens in strict typing mode, where it may not even be expected that the addition succeeds.
Anyhow, the problem is that
zend_parse_arg_str_or_long_slow()converts the passedarg.Also note that GMP also uses ZPP functionality, but catches any such type conversion, even in coercive typing mode.
PHP Version
PHP 8.4
Operating System
any