当前位置:  开发笔记 > 编程语言 > 正文

PHP中的动态类方法调用

如何解决《PHP中的动态类方法调用》经验,为你挑选了3个好方法。

有没有办法动态调用PHP的同一个类中的方法?我没有正确的语法,但我希望做类似的事情:

$this->{$methodName}($arg1, $arg2, $arg3);

小智.. 160

有多种方法可以做到这一点:

$this->{$methodName}($arg1, $arg2, $arg3);
$this->$methodName($arg1, $arg2, $arg3);
call_user_func_array(array($this, $methodName), array($arg1, $arg2, $arg3));

您甚至可以使用反射API http://php.net/manual/en/class.reflection.php



1> 小智..:

有多种方法可以做到这一点:

$this->{$methodName}($arg1, $arg2, $arg3);
$this->$methodName($arg1, $arg2, $arg3);
call_user_func_array(array($this, $methodName), array($arg1, $arg2, $arg3));

您甚至可以使用反射API http://php.net/manual/en/class.reflection.php



2> Konrad Rudol..:

只需省略大括号:

$this->$methodName($arg1, $arg2, $arg3);



3> 小智..:

您可以使用PHP中的重载: 重载

class Test {

    private $name;

    public function __call($name, $arguments) {
        echo 'Method Name:' . $name . ' Arguments:' . implode(',', $arguments);
        //do a get
        if (preg_match('/^get_(.+)/', $name, $matches)) {
            $var_name = $matches[1];
            return $this->$var_name ? $this->$var_name : $arguments[0];
        }
        //do a set
        if (preg_match('/^set_(.+)/', $name, $matches)) {
            $var_name = $matches[1];
            $this->$var_name = $arguments[0];
        }
    }
}

$obj = new Test();
$obj->set_name('Any String'); //Echo:Method Name: set_name Arguments:Any String
echo $obj->get_name();//Echo:Method Name: get_name Arguments:
                      //return: Any String

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有