如何通过变量访问静态方法?
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.
测试
正在尝试获取
$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.
测试