Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我可以为递归迭代器结果对象提供typehint吗?_Php_Iterator_Phpstorm_Return Type_Phpdoc - Fatal编程技术网

Php 我可以为递归迭代器结果对象提供typehint吗?

Php 我可以为递归迭代器结果对象提供typehint吗?,php,iterator,phpstorm,return-type,phpdoc,Php,Iterator,Phpstorm,Return Type,Phpdoc,在php项目中,我可以通过以下方式获得所有文件的列表: /** * @param string $dirPath * * @return RecursiveIteratorIterator */ private static function getFiles(string $dirPath): RecursiveIteratorIterator { return new RecursiveIteratorItera

在php项目中,我可以通过以下方式获得所有文件的列表:

    /**
     * @param string $dirPath
     *
     * @return RecursiveIteratorIterator
     */
    private static function getFiles(string $dirPath): RecursiveIteratorIterator
    {
        return new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($dirPath, RecursiveDirectoryIterator::SKIP_DOTS),
            RecursiveIteratorIterator::CHILD_FIRST
        );
    }
我可以通过以下方式使用它:

$files = self::getFiles($dirPath);
然而,当我使用它时,我发现自己在动态地注释类型:

    foreach ($files as $fileinfo) {
        /**
         * @var SplFileInfo $fileinfo
         */
        $rm = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
        $rm($fileinfo->getRealPath());
    }
是否有一种方法可以在
getFiles
-方法级别对类型进行注释

使用递归迭代器会使任何类型提示混合,例如,对于当前:

/**
 * Access the current element value
 * @link https://php.net/manual/en/recursiveiteratoriterator.current.php
 * @return mixed The current elements value.
 */
public function current() { }
另外,我想保留一个严格的返回类型,所以我不想使用:

/**
 * @param string $dirPath
 *
 * @return RecursiveIteratorIterator|SplFileInfo[]
 */
private static function getFiles(string $dirPath) {
...
}
因为我不想谎称结果是数组。它不是,它是一个
迭代器
/
可遍历的
,它生成
SplFileInfo
对象

充其量是一种通用的方法,但也只有phpstorm解决方案就足够了


我尝试使用严格返回类型
iterable
和phpdoc comment
iterable
,但这不起作用。

您试图准确地注释什么对象&在代码中哪里需要它?如果只是foreach中的
$fileinfo
用法,恐怕没有其他选择。