Php 我想动态地使用一个类。哪种方法比下面的方法好

Php 我想动态地使用一个类。哪种方法比下面的方法好,php,arrays,class,dynamic,Php,Arrays,Class,Dynamic,我想动态地使用一个类。这比下面的方法好 例1: class foo { function bar($arg, $arg2) { echo __METHOD__, " got $arg and $arg2\n"; } } 结果: 福:酒吧有一个和两个 例2: $a = [ new foo, 'bar' ]; $a(...["one", "two"]); 结果: 福:酒吧有一个和两个 你还有其他建议吗?这取决于你的更好的标准是什么。我想在大多数情况下,速度差是微不

我想动态地使用一个类。这比下面的方法好

例1:

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

福:酒吧有一个和两个

例2:

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

福:酒吧有一个和两个


你还有其他建议吗?

这取决于你的更好的标准是什么。我想在大多数情况下,速度差是微不足道的。我不太相信基准测试,但这里有一些你可以看看的

因此,我们可以忽略速度差异,我们可以看看编码风格这是个人偏好的问题,但我会这样做。当您使用(>=PHP5.6)时,您可以直接调用object,而无需创建:

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

(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' => []
];
这是


正如您所见,它看起来比使用or更自然。

这取决于您的更好的标准是什么。我想在大多数情况下,速度差是微不足道的。我不太相信基准测试,但这里有一些你可以看看的

因此,我们可以忽略速度差异,我们可以看看编码风格这是个人偏好的问题,但我会这样做。当您使用(>=PHP5.6)时,您可以直接调用object,而无需创建:

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

(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' => []
];
这是


正如您所见,它看起来比使用or更自然。

谢谢您的回答。我知道。@Scaffold,那么你的问题是什么?令我惊讶的是,一个序列中的类和方法是如何工作的,而不需要另一个函数。我的英语不好,我可以告诉你。@Scaffold,这是一种有效的形式:“实例化对象的方法作为数组传递,数组包含索引0处的对象和索引1处的方法名。允许从类内访问受保护和私有方法。”。这就是为什么您可以使用这样的数组作为函数。谢谢您的回答。我知道。@Scaffold,那么你的问题是什么?令我惊讶的是,一个序列中的类和方法是如何工作的,而不需要另一个函数。我的英语不好,我可以告诉你。@Scaffold,这是一种有效的形式:“实例化对象的方法作为数组传递,数组包含索引0处的对象和索引1处的方法名。允许从类内访问受保护和私有方法。”。这就是为什么可以使用这样的数组作为函数。