31. Historically, the reason for this discrepancy is that internal functions have
supported a concept of scalar types (bool, int, float, string) long before they were
introduced for user-defined functions in PHP 7.0, and the existing implementation
silently accepted null values. For the new scalar type declarations introduced in
PHP 7.0 an explicit choice was made to not accept null values to non-nullable
arguments, but changing the existing behavior of internal functions would have
been too disruptive at the time.
PHP RFC: Deprecate passing null to non-nullable arguments of internal functions
2024-02-11 | 笔贬笔の「歴史的な理由」ってなんだ!?