使用 phpdocblock 定义 php 中方法/函数的通用返回

use*_*ess 1 php visual-studio-code phpstan psalm-php

有没有一种方法可以指定函数将返回特定类型的对象,其中类型是参数之一的字符串?

例如

/**
 * @return object<$class>
 */
public function create(string $class): object {
 ... some factory stuff
}

Run Code Online (Sandbox Code Playgroud)

这样 vscode 或 phpstorm 就会知道当我这样做时

$myvar = X::create('MyClass');
Run Code Online (Sandbox Code Playgroud)

$myvar 将是 MyClass 类型,我将拥有适当的智能感知/自动完成功能?

Nic*_*ase 5

这可以使用如下模板来实现:

/**
 * @template T of object
 * @psalm-param class-string<T> $a
 * @param class-string<T> $a
 * @return T
 */
function foo($a)
{
    return $a;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道 VSCode 是否已经支持了。例如 PhpStorm 不知道如何正确处理返回值