从不合格的 class 名称中获取完全合格的 class 名称

Get fully qualified class name from unqualified class name

我怎样才能完成这项工作?

<?php
namespace Target {
  
  class FooBar {
  
  }
}

namespace Test {
  
  use Target\FooBar;

  $class = 'FooBar';

  var_dump(new \ReflectionClass(new $class));

}

目前它失败了,因为反射 class 只找到具有完整命名空间的 classes。我如何更改它以便它从 use 语句中获取 class ?如果有我缺少的功能。尝试 $class::class 之类的操作也会出错。

我的全部目的是能够像这样使用数组的注释:

<?php
namespace Target {
  use Foo\Bar;
  
  class FooBar {
    /**
     * @var Bar[]|null
     */
    public ?array $foo;
  }
}

也许我正在做的事情是不可能的,我应该在注释中使用完全限定的 class 名称。

我正在与 PHP7.4

合作

恐怕这不可能。根据 PHP documentation 完全限定的 class 名称应该用于动态 class 名称。

One must use the fully qualified name (class name with namespace prefix). Note that because there is no difference between a qualified and a fully qualified Name inside a dynamic class name, function name, or constant name, the leading backslash is not necessary.

<?php

namespace Target {
    class FooBar
    {
    }
}

namespace Test {
    $class = 'Target\FooBar';

    var_dump(new \ReflectionClass(new $class));
}

作为替代方案,有一个选项可以解析 use 语句并从那里获取完全限定的 class 名称,但这种方式有点老套。 github.com/Kdyby/ParseUseStatements