PHP:类命名空间时出现参数类型提示问题

Rya*_*die 0 php types type-hinting

失败(组成代码):

namespace Season\Summer;

class Summer
{
    public static function days(string $month)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

带有:

"Argument 1 passed to Season\\Summer\\Summer::days() must be an instance of string, string given, called in /path/to/Seasons/Summer/Summer.php on line 5."
Run Code Online (Sandbox Code Playgroud)

似乎命名空间正在引起PHP的内置类型提示问题,因为我认为它正在检查参数$month是否为标量类型string类,Season\Summer\而不是全局定义string(我可能错了)。

我该如何解决?解决办法是什么?给我们is_*()里面的功能?

小智 5

PHP不支持string作为类型提示。如果您需要$ month作为字符串,请从method参数中删除该字符串,进行强制转换或使用is_string()以下命令检查它是否为字符串:

namespace Season\Summer;

class Summer
{
    public static function days($month)
    {
        $month = (string) $month;
        // or
        if (! is_string($month)) {
            throw new Exception("Argument $month is not a string.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

文档可以在这里找到

  • 由于PHP 7的发布,现在该更新答案了。 (5认同)