加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 动态类方法按数组值调用链接

发布时间:2020-12-13 17:14:21 所属栏目:PHP教程 来源:网络整理
导读:例如,我有MyClass类: Class MyClass { public function method_1() { return $this; } public function method_2() { return $this; } public function method_n() { return $this; }} 我有一系列函数及其参数: $array = array( 'method_1' = array( '0' =
例如,我有MyClass类:

Class MyClass {

    public function method_1() {
        return $this;
    }

    public function method_2() {
        return $this;
    }

    public function method_n() {
        return $this;
    }
}

我有一系列函数及其参数:

$array = array(
    'method_1' => array(
        '0' => 'first_argument','1' => 'second_argument','2' => 'nth_argument',),'method_2' => array(
        '0' => 'first_argument',);

如何从链中的数组调用MyClass方法?

$result = $my_class->$array['method_1']($array['method_1'][0],$array['method_1'][0])
    ->$array['method_1']($array['method_2'][0],$array['method_2'][0])
    ->$array['method_n']($array['method_n'][0],$array['method_n'][0]);

例如:

foreach($array as $function => $args) {
   // build chain here and execute after foreach
}

那么,主要的问题是如何用链中的参数调用无限和未知数量的类函数?谢谢!

解决方法

将$array [‘method_ *’]放入{}括号中:

$result = $my_class->{$array['method_1']}($array['method_1'][0],$array['method_1'][0])
    ->{$array['method_1']}($array['method_2'][0],$array['method_2'][0])
    ->{$array['method_n']}($array['method_n'][0],$array['method_n'][0]);

如果我注意到,尽管PHP允许这样做,但为了代码可读性和可靠性,您应该重新考虑动态链调用.它可能会节省你几行,但可能会在以后的调试中引起一些麻烦

//附录:
IMO,更好的逻辑方法是通过foreach和call_user_func_array()

foreach ($array as $method => $args) {
    call_user_func_array(array($my_class,$method),$args);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读