我正在使用 PHP 7.4.16。我在我的 PHP 文件中启用了
这对我来说毫无意义,并且似乎是一个明显的不一致性,会导致错误。是否有人可以解释为什么会这样,或者我是否做错了什么?
测试代码:
strict_types
,以为它会通过抛出 TypeError
来防止将 string
参数传递给期望 int
的函数。然而,该函数实际上接受了 string
并将其强制转换为 int
。但是,如果我在函数上放置返回类型提示,则可以按预期工作,抛出 TypeError
。这对我来说毫无意义,并且似乎是一个明显的不一致性,会导致错误。是否有人可以解释为什么会这样,或者我是否做错了什么?
测试代码:
<?php
declare(strict_types=1);
$ids = ['1', '2', '3'];
// No error thrown, coerces string argument to int.
array_map(fn (int $id) => $id, $ids);
// Throws PHP Fatal error: Uncaught TypeError: Return value of {closure}() must be of the type int, string returned
array_map(fn ($id): int => $id, $ids);
call_user_func
,它被转换为直接函数调用作为优化。https://3v4l.org/5OGH6 - Rain