Hi

Am 2026-06-25 00:58, schrieb Morgan:
It's a different category of problem (and a lot more difficult than just swapping out an alias), but gettype() returns "double" and "integer" for floats and ints (and "boolean" for bools).

A change would require users to write a translator wrapper around gettype that continues to output the old names and call that until they're able to replace all their uses of them:

$t = gettype($v);
return $t === 'integer' ? 'int' : ($t === 'double' ? 'float' : $t);

There already is `get_debug_type()` as a replacement that is documented to:

[differ] from gettype() in that it returns type names that are more consistent with actual usage, rather than those present for historical reasons

And the documentation page for `gettype()` also mentions that:

For type checking, use is_* functions.

meaning that `gettype()` is not supposed to be used for actual type *checking* (e.g. with a `switch(gettype($var))`). If it's not intended for this use, then “human readable output” remains as a possible use case, which is already better solved by `get_debug_type()` which outputs the canonical names and also class names instead of just `object`.

Given the replacement already being available since PHP 8.0 (and polyfillable, see https://github.com/symfony/polyfill/blob/a9a8687879dfea232e90d38ba949f65c3ece4456/src/Php80/Php80.php#L28-L58), the correct action would be not to adjust the function any more and to deprecate it with a reference to `get_debug_type()`.

Best regards
Tim Düsterhus

Reply via email to