【发布时间】:2015-07-22 06:43:50
【问题描述】:
我想从 PHP 中的变量类调用静态方法。正如在 SO 上多次指出的那样,并且因为它是一般做法,以下工作按预期工作:
class Foo {
public function compile($strClass) {
$strClass::find(); // this works
}
}
尽管如此,我必须从类 Foo 的不同方法调用 $strClass 的不同查找方法。也就是为什么我要把$strClass 存放在$this->strClass 中。不幸的是,这不起作用:
class Foo {
protected $strClass;
public function __construct($strClass)
{
$this->strClass = $strClass;
}
public function compile($strClass) {
$this->strClass::find(); // this does not work
}
}
关于如何解决该问题的任何想法或提示?
更新:
正如 cmets 中指出的那样,使用 call_user_func 可能是一种解决方案:
call_user_func(array($this->strClass, 'find'), $strParam);
无论如何,这使得 PHPstorm 中的代码完成变得不可能。有什么提示吗?也许使用代码注释?
【问题讨论】:
-
如果
{$this->strClass}::find()可以工作,PHPStorm 代码完成应该如何知道$this->strClass的运行时值? -
我希望可以告诉 PHPstorm 可能存储在 $this->strClass 中的所有类都将具有相同的父类,例如/** @type Model $this->strClass */ (不工作)
标签: php oop static-methods