在PHP中进行类型提示时,int是否不同于字符串?

时间:2019-01-23 17:25:10

标签: php type-hinting

我一直在尝试用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

1 个答案:

答案 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();
}