PHPDoc 或类型提示 class 作为方法的参数

PHPDoc or type hint class as parameter to method

如何指示 function/method 接受 class 作为参数? PHPDoc 或类型提示就足够了,但似乎都不允许。

这是我认为应该起作用的示例...

/**
 * @param $class class  A reference to a class that will be used to do something
 */
function doReallyWeirdStuff(class $class){
  $class::callStaticMethod();
}

我已经知道如何将 class 传递给此函数。我如何表明你应该这样做?

Class 名称只是字符串,因此您必须将它们提示为字符串。然后,您需要在 运行 时间,在您的方法中检查它实际上是 class:

/**
 * @param $class string  A reference to a class that will be used to do something
 */
function doReallyWeirdStuff(string $class){
  if (class_exists($class)) {
    $class::callStaticMethod();
  } else {
    throw \InvalidArgumentException;
  }
}

请注意,要严格遵守字符串值(class 名称需要),您需要启用严格类型提示:

declare(strict_types=1);

否则,你可以这样调用:

doReallyWeirdStuff(M_PI);

这没有多大意义。

你不能使用 PHPDoc 类型提示,除非你传递一个实际的对象实例。

但是您可以滥用 PHP 文档类型提示。

string|Class $class
or
Class $class

根据您的运行宁,这将产生非常复杂的结果。您将失去一些 运行 不带 false negatives/positives.

类型检查的能力