我想动态地使用一个类。哪个比以下方法更好

时间:2017-03-11 12:39:00

标签: php arrays class dynamic

class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}

我想动态使用一个类。哪个比以下方法更好。

示例1:

$a = [ new foo, 'bar' ];
$a(...["one", "two"]);

结果:

foo :: bar得到了一两个

示例2:

call_user_func_array([ new foo, 'bar' ], ["one", "two"]);

结果:

foo :: bar得到了一两个

你还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

这取决于您的更好的标准。我想在大多数情况下速度差异都是微不足道的。我不是基准测试的忠实信徒,但你可以看看some benchmarks

因此我们可以忽略速度差异,我们可以看一下编码风格。 这是个人偏好的问题,但我会这样做。当您使用splat operator> = PHP5.6 )时,您可以致电{直接在对象上{3}},而不创建variable function

(new foo)->{'bar'}(...["one", "two"]);

因此,请考虑您有一个更复杂的类:

class Foo {
    public function bar($arg, $arg2)
    {
        echo __METHOD__, " got $arg and $arg2\n";
    }

    public function baz($arg)
    {
        echo __METHOD__, " got $arg\n";
    }

    public function quux()
    {
        echo __METHOD__;
    }
}

并列出要调用的方法:

$methods = [
    'bar' => ['one', 'two'],
    'baz' => ['one'],
    'quux' => []
];

然后调用代码将如下所示:

$object = new Foo;

foreach ($methods as $method => $args) {
    $object->$method(...$args);
}

这是callable

正如您所看到的,它看起来比使用working democallable更自然。