如何通过变量访问静态方法?

How can i get access to static method through variable?

正在尝试获取

$class = 'MyClass';
$class::classname() - MyClass not found

那么,有可能吗?或者还有其他选择吗?

public function actionMultiUpdate($module)
{
    if (isset($_REQUEST['multiedit']) && count($_REQUEST['multiedit'])) {
        foreach ($_REQUEST['multiedit'] as $id => $data) {
            $model = $module::findOne($id);
            $model->weight = $data['weight'];
            $model->save();
        }
    }
}

您可以使用 call_user_func 到 运行 具有字符串 class 名称的静态方法。例如:

class Myclass
{

    public static function classname() {
        return __CLASS__;
    }
}

$class = 'MyClass';
echo call_user_func([$class, 'classname']);

此外,如果你想将变量传递给静态方法,你应该在第二个参数中传递它们。例如:

class MyClass
{
    public static function doSomething($value1, $value2)
    {
        return $value1 . ' and ' . $value2;
    }
}

$class = 'MyClass';
echo call_user_func([$class, 'doSomething'], 'first value', 'second value');

可以把class名字放在变量里用方法调用,也可以把class名字和方法放在变量里调用。也可以使用call_user_func().

class Myclass{
  public static function myMethod(){
    return "return from Myclass::myMethod";
  }
}

//only class name in a variable
$curClass = 'Myclass';
echo $curClass::myMethod();

//class and Method in a variable
$classAndmethod = 'Myclass::myMethod';
echo $classAndmethod();

使用 php 7.2.21.

测试