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得到了一两个
你还有其他建议吗?
答案 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 demo或callable更自然。