1

我想在我的 php 类中有一个方法数组,用方法名称索引,这样我就可以做这样的事情:

public function executeMethod($methodName){
 $method=$this->methodArray[$methodName];
 $this->$method();
 // or some other way to call a method whose name is stored in variable $methodName
}

我为__call找到了这个:

在与尚未声明或在当前范围内不可见的属性或方法交互时调用重载方法

但是,我想在 executeMethod 中使用的方法是可见的。

这样做的正确方法是什么?是否可以?

编辑:我想在executeMethod中获取一个方法名称,然后调用给定名称的方法,并且对方法数组有了一个想法。

4

3 回答 3

1

您可以使用带有语法的字符串来调用对象方法和属性

$method = 'your_method_name_as_string';
$this->$method();

来自php 文档

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>
于 2013-03-28T16:40:33.797 回答
0

也许你正在寻找这样的东西:

public function executeMethod($methodName) {
    if (isset($this->methodArray[$methodName])) {
        $method = $this->methodArray[$methodName];
        return call_user_func(array($this, $method));
    }
    throw new Exception("There is no such method!");
}
于 2013-03-28T16:40:47.907 回答
0

匿名函数在 php 5.3 中可用

我认为您正在尝试做类似的事情

$tmp['doo'] = function() { echo "DOO"; };
$tmp['foo'] = function() { echo "FOO"; };
$tmp['goo'] = function() { echo "GOO"; };

$tmp['doo']();
于 2013-03-28T16:44:47.763 回答