在方法调用期间使用对象属性作为静态类名


using object propery as static class name during method invokation

假设我有一个静态方法b()的静态类A

现在假设我有类 C 和类变量函数名称 = 'A';

所以我想通过以下内容在一行中调用 A 的 b() 函数:

//within class C
$this->functionName::b();

但是,这最终会返回解析错误。有没有办法在一行中$this->函数名称="A"时通过 $this->functionName 调用 A::b() call_user_func等?

统一变量语法 RFC 涵盖了这一点,并且已经在 PHP 7 中实现了。

它尚未向后移植,您将无法在以前的任何版本中使用该语法。


PHP 7 示例:

class a
{
    static public function b()
    {
        echo "Hello!";
    }
}
class c
{
    public $functionName = 'a';
    public function run()
    {
        $this->functionName::b();
    }
}
(new c)->run();

输出:

Hello!