代码之家  ›  专栏  ›  技术社区  ›  treyBake user1850175

在php中键入hinting时do int与字符串不同

  •  0
  • treyBake user1850175  · 技术社区  · 7 年前

    我一直在尝试用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) 并返回 一串 ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   miken32 Amit D    7 年前

    如评论所述, 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();
    }
    
    推荐文章