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

PHPDoc或类型提示类作为方法的参数,php,phpdoc,type-hinting,Php,Phpdoc,Type Hinting,如何指示函数/方法接受类作为参数?PHPDoc或类型暗示都足够了,但似乎两者都不允许 这是一个我认为应该有效的例子 /** *@param$class类对将用于执行某些操作的类的引用 */ 函数doReallyWeirdStuff(class$class){ $class::callStaticMethod(); } 我已经知道如何将类传递给这个函数。如何指示您应该这样做?类名仅仅是字符串,因此您必须将它们作为字符串键入提示。然后,您需要在运行时在方法中检查它实际上是一个类: /** * @

如何指示函数/方法接受类作为参数?PHPDoc或类型暗示都足够了,但似乎两者都不允许

这是一个我认为应该有效的例子

/**
*@param$class类对将用于执行某些操作的类的引用
*/
函数doReallyWeirdStuff(class$class){
$class::callStaticMethod();
}

我已经知道如何将类传递给这个函数。如何指示您应该这样做?

类名仅仅是字符串,因此您必须将它们作为字符串键入提示。然后,您需要在运行时在方法中检查它实际上是一个类:

/**
 * @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;
  }
}
请注意,要严格遵守字符串值(类名需要这样做),需要启用严格类型提示:

declare(strict_types=1);
否则,您可以这样称呼:

doReallyWeirdStuff(M_PI);

这没有多大意义。

除非传递实际的对象实例,否则不能使用PHPDoc类型暗示

但是,您可以滥用PHP文档类型暗示

string|Class $class
or
Class $class

这将产生非常复杂的结果,具体取决于您运行的是什么。您将失去一些运行类型检查而不会出现误报/误报的能力。

Aha!好极了感谢您输入您应该使用的类名
\MyNamespace\MyClass::class
,以便您的IDE可以重构该代码。等待期一过,我就会通知您。:)<启用标量类型提示不需要代码>声明(strict_types=1)。只有当您希望PHP在文件中不遵守确切类型的情况下抛出错误(默认情况下,PHP会将另一种类型转换为提示的类型,而不是抛出错误)时,才需要这样做。您可能对OP的看法是正确的。只需说明一个不准确的地方,因为OP以外的许多人可能会遇到您的解决方案,并从字面上理解您的话。