【问题标题】:How can i get access to static method through variable? [duplicate]如何通过变量访问静态方法? [复制]
【发布时间】:2019-09-05 04:19:48
【问题描述】:

试图得到

$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();
        }
    }
}

【问题讨论】:

标签: php oop variables static-classes


【解决方案1】:

您可以使用call_user_func 以字符串类名运行静态方法。例如:

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');

【讨论】:

  • 如何将变量传递给方法?
  • 我认为它有效,但在 yii2 中不是。也许你知道这个框架中的解决方案?
  • @EvgenyMusonov 您能否将您尝试运行的代码附加到答案中?
  • 主题里可以看到
  • 我没有看到问题中使用 call_user_func 的代码,也不知道使用了什么数据
【解决方案2】:

你可以把类名放在一个变量里,用方法调用,也可以把类名和方法放在一个变量里,然后调用。也可以使用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 测试。

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 2012-06-29
    • 1970-01-01
    • 2010-10-15
    • 2020-06-15
    • 1970-01-01
    • 2011-04-17
    • 2021-06-16
    • 2012-12-24
    相关资源
    最近更新 更多