2

当我想存储资源(如 ftp-Stream 或 ftp-Buffer)时,类型化属性的正确类型是什么?

/**
 * @var Resource|null
 */
private $__ftp_connection = null;

没有像Resource. 所以以下方法不起作用:

/**
 * @var Resource|null
 */
private ?Resource $__ftp_connection = null;

导致 php 认为这是一个名为 Resource 的类。

4

1 回答 1

3

简短的回答:

你不能。对不起。

一些背景:

这里有一个 RFC 讨论这个差距,但它自 2015 年以来一直没有改变:https ://wiki.php.net/rfc/resource_typehint

标量类型提示的原始 RFC指定

没有添加资源的类型声明,因为这会阻止从资源移动到现有扩展的对象,有些人已经这样做了(例如 GMP)。

有一条关于错误 71518的评论指出,资源的类型提示确实不是很有用,因为您仍然可以传入文件句柄、GD 资源或 CURL 句柄,这些都没有远程做同样的事情。该错误本身已被暂停,因此看起来不会很快得到解决。

用户级的妥协可能是围绕您需要的任何资源类型编写一个瘦对象包装器,并针对该类进行类型提示。您仍然不会获得对新对象上资源的类型化属性支持,但它会使问题对您的应用程序的其余部分不那么明显。

于 2020-03-20T14:03:22.823 回答