Many built-in PHP functions quietly return false when you pass an invalid value, while modern PHP throws a ValueError instead. This RFC from Muhammed Arshid KV groups six of these conversions into one proposal for PHP 8.6, with a separate vote for each.
What changes
mysqli_options()throws when you pass an option that doesn't exist.mkdir()throws when the permission mode is out of range.chmod()throws for the same reason.copy()throws when the destination path is empty. Today that can even hang on some systems, like macOS.error_log()throws when$message_typeisn't between 0 and 4.bindec(),octdec(),hexdec()andbase_convert()throw when a character isn't valid for the number base. This part comes from Sjoerd Langkemper.
Here's mkdir() before and after:
// Current behavior var_dump(mkdir("testdir", 99999)); // bool(false) // After (proposed behavior) try { mkdir("testdir", 99999); } catch (ValueError $e) { echo $e->getMessage(); // mkdir(): Argument #2 ($mode) must be between 0 and 0o7777 }
And here's the number base change:
var_dump(hexdec('z')); // PHP 7.4 - 8.5: Deprecated: Invalid characters passed for attempted conversion, these have been ignored in ... // int(0) // PHP 8.6 (proposed): Fatal error: Uncaught ValueError: hexdec(): Argument #1 ($hex_string) has invalid characters for attempted conversion in ...
That case has emitted a deprecation notice since PHP 7.4, and this RFC would turn it into an error.
What it means for existing code
If your code passes one of these invalid values and checks for false, it would get a ValueError instead. You'd need to add a try/catch or fix the value. The RFC expects the impact to be low, since invalid values like these are rare in working code.
Where it stands
The page still says it's under discussion, at version 0.9, dated February 19, 2026. Vote polls were added for each part, marked as a restart, with a close date of March 17, 2026, but no votes were cast in any of them.