我一直在尝试用PHP进行类型提示,并在进行一些测试时遇到了一些问题。我有这个功能:
function foobar(string $foo)
{
return gettype($foo);
}
我尝试了两种用途:
echo foobar(4);
echo foobar('hello, world');
这两个输出string
。这立即使我感到奇怪,因为我在第一次使用时传递了一个整数。然后,我尝试添加:
print_r(foobar(['hello']));
确实可以肯定的是,我遇到了第一种情况下的致命错误。
取自here,表明int与字符串不同:
+=======+==================================+
| int | The parameter must be an integer |
+=======+==================================+
|string | The parameter must be a string |
+=======+==================================+
那为什么string $foo
允许我的foobar(4)
并返回string
?
答案 0 :(得分:1)
如评论中所述,PHP 7.0 introduced标量类型声明并为摆脱其混乱的松散类型提供了“严格”模式。默认的“强制”模式使PHP可以像以往一样保持松散状态。
当您在强制模式下为参数指定字符串类型时,您会告诉PHP您希望参数为字符串,如果不是,则应尝试使其成为字符串。
通过将declaration添加为代码的第一行,您可以更改模式以获得所需的行为:
<?php
declare(strict_types=1);
function foobar(string $foo)
{
return gettype($foo);
}
try {
echo foobar(4);
} catch (\TypeError $e) {
echo $e->getMessage();
}