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.
类型检查的能力
如何指示 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.
类型检查的能力