返回一个方法而不执行它

时间:2015-10-18 12:16:16

标签: php

我有一个方法,它在参数中获取方法名称,并返回该方法(来自另一个类)。我没有找到如何在不执行它的情况下返回此方法。

这里有一个类#1的代码示例:

public function hello() {
    return "Hello World!";
}

第2课的方法:

public function getPackageMethod($method) {
    if (method_exists($this->package, $method)) {
        return $this->package->$method; // This seems to return nothing
    }
}

我想进入另一个类似的脚本:

$obj = new Obj();
$hello = $obj->getPackageMethod('hello');
$hello(); // Calling the method here. But currently got a error that $hello is not a function

我认为有可能这样做,但我想我忘记了一些事情。 感谢。

2 个答案:

答案 0 :(得分:0)

当您返回initialSelection时,您已经像属性一样运行它。您需要做的是保存方法,只在需要时运行它。

就像那样:

this.attrs.initialSelection

你可以这样做:

$this->package->$method

答案 1 :(得分:0)

您可以创建一个闭包,然后将类#1的实例绑定到闭包:

class salutations {
    public function hello() {
        return "Hello World!";
    }
}

class methodFactory {
    public function __construct($instance) {
        $this->package = $instance;
    }

    public function getPackageMethod($method) {
        if (method_exists($this->package, $method)) {
            $f = function() use ($method) { return $this->package->{$method}(); };
            $f->bindTo($this);
            return $f;
        }
    }
}

$salutationsInstance = new salutations();

$obj = new methodFactory($salutationsInstance);
$hello = $obj->getPackageMethod('hello');
echo $hello();

Demo