首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数接受Laravel集合对象,尽管只允许字符串。

问函数接受Laravel集合对象,尽管只允许字符串。
EN

Stack Overflow用户
提问于 2022-04-26 08:27:22
回答 3查看 59关注 0票数 2

我刚刚遇到了一个问题,我无法解释为什么这样做。

我有一个只接受字符串类型参数的函数。

示例类

代码语言:javascript
复制
class A {

    public function __construct() {
        $data = new \Illuminate\Support\Collection(); 
        // getType($data) => object
        $this->make($data);
    }

    private function make(string $str): string {
        // getType($str) => string
        ...
    }
}

问题:为什么可以传递一个集合,即使只允许字符串?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-26 08:49:04

为了避免这种行为,您可以在PHP类的顶部添加:declare(strict_types=1);

票数 1
EN

Stack Overflow用户

发布于 2022-04-26 08:49:42

根据文档,php将尝试转换它:

默认情况下,如果可能,PHP会将错误类型的值强制放入预期的标量类型声明中。例如,为期望字符串的参数提供int的函数将得到一个类型为string的变量。

但是如果您用declare(strict_types=1);重新运行您的代码,您将得到TypeError消息。

票数 2
EN

Stack Overflow用户

发布于 2022-04-26 08:40:15

根据定义,空集合是空数组。然后,由于PHP的类型杂耍,它会传递您的方法。这意味着在比较不同类型的变量时,PHP将首先将它们转换为公共的可比类型,在这种情况下,这种类型将数组转换为字符串。

也可以通过类型转换变量来避免这种情况。

您可以找到有关PHP文档https://www.php.net/manual/en/language.types.type-juggling.php的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72010710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档