从PHP中的代码引用静态方法

时间:2018-06-22 10:54:40

标签: php

有什么方法可以引用类静态方法以与call_user_func一起使用而不使用字符串吗?

现在,我知道在register类中调用User方法的唯一两个选项是:

call_user_func([User::class, 'register']);
call_user_func(User::class . '::register');

这两种方法都需要使用字符串来标识该方法,从而使代码无法重构。

作为示例,例如对于属性,我正在使用可以正常运行的变通方法:

class User {
    /**
     * @return static
    */
    public static function prop()
    {
       return new PropertyName();
    }
}

class PropertyName
{    
    public function __get($name)
    {
        return $name;
    }
}

所以我可以编写具有自动完成和重构支持的代码:

User::factory()
  ->where(User::prop()->email, $email)
  ->get_one()

1 个答案:

答案 0 :(得分:0)

回答问题“是否有任何方法可以在不使用字符串的情况下引用用于call_user_func的类静态方法?” -是的

但是我不确定这就是你想要的:D

class Foo {

    public static function bar() {
        echo "yaay \o/";
    }

}

call_user_func(function() {
    Foo::bar();
});