gpt4 book ai didi

php - 文件句柄作为函数参数的类型提示

转载 作者:行者123 更新时间:2023-12-02 08:08:46 25 4
gpt4 key购买 nike

我目前正在研究一些 PHP 代码,并试图使其更新。我找到了一个函数,它可以检索文件句柄(通过 fopen)。

返回类型是stream。我检查了

$handle = fopen("myfile.csv", "r");
var_dump(get_resource_type($handle));

如上所述,类型似乎是stream

当我尝试将此对象传递给函数时,我无法使用流强制类型。

public function parseHandle(stream $handle){}

最终出现以下错误消息:

Argument 1 passed to parseHandle must be an instance of stream, resource given.

当我尝试将签名更改为function parseHandle(resource $resource)时,会产生以下错误:

Argument 1 passed to parseHandle must be an instance of resource, resource given

正确的数据类型是什么?我应该如何在参数中使用它?

我知道我可以在函数的第一行中使用 is_resource 来验证它,但我仍然想知道。

最佳答案

不幸的是,您不能使用原始类型resource作为类型提示。 PHP 的最新类型提示系统更改为 scalar type hints ,仅添加了 intfloatstringbool

您引用的错误之前曾出现过,令人困惑,尤其是在标量类型提示的上下文中。让我为您制作模板:

Argument [N] passed to [Function] must be an instance of [Class], [Type] given

之所以会出现这种困惑,是因为 PHP 允许类与所有原语的记录原语(boolfloat 等)具有相同的名称PHP 7 之前,以及 PHP 7 及更高版本中的一些 。因此,当您说 stream $handle 时,PHP 期望 $handle 属于 class stream。同样,resource $handle 期望 $handle 属于 resource 类。

如果您想输入提示资源,我建议使用 \SplFileObject:

$handle = new \SplFileObject('myfile.csv', 'r');
function parseHandle(\SplFileObject $handle) { ... }

这不是世界上最好的事情,因为\SplFileObject 有一些怪癖,但归根结底,如果你想在 PHP 中输​​入提示,你必须有一个数组、一个标量,或者一个类。

关于php - 文件句柄作为函数参数的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40637939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com