2012-07-16 50 views
2

可能重复:
PHP, how to pass func-get-args values to another function as list of arguments?具有未知数量参数的方法是否可以调用具有未知数量参数的另一种方法?

我有一个基类的方法,可以采取任意数量的参数。此方法需要调用第三方对象的方法,该方法可以使用传递给第一个方法的参数获取任意数量的参数。

我提到它是一个第三方对象,被调用来强化被调用方法的签名不能被修改为接受数组或对象的约束。

例子:

<?php 
class Example {  

    private $thirdPartyObject = null; 

    public function methodOne() { 
     $arguments = func_get_args(); 

     $this->thirdPartyObject = new ThirdPartyObject(); 
     $this->externalObject->methodName(/* pass on variable number of arguments here */); 
    } 
} 

$exampleObject = new Example(); 
$exampleObject->methodOne('a', 'b', 'c'); 


如果我们事先知道被传递到Example->methodOne()参数的个数,然后我们可以在相同数量的参数传递给ThirdPartyObject->methodName()

如果我们事先不知道传递给Example->methodOne()的参数的数量,我们可以将这些参数传递给ThirdPartyObject->methodName()吗?

在这种情况下,ThirdPartyObject->methodName()被称为与一个或多个参数,如:

<?php 
$thirdPartyObject = new ThirdPartyObject(); 
$thirdPartyObject->methodName('a'); 
$thirdPartyObject->methodName('a', 'b'); 
$thirdPartyObject->methodName('a', /* ... */, 'N'); 
+2

您是否尝试过这个?:[http://stackoverflow.com/questions/2126778/ph​​p-how-to-pass-func-get-args - 值对另一个功能-AS--的-参数列表(http://stackoverflow.com/questions/2126778/ph​​p-how-to-pass-func-get-args-values-to-another- function-as-list-of-arguments) – Zbigniew 2012-07-16 15:11:38

+0

@des:谢谢你的建议,我的搜索没有找到它。 – 2012-07-16 15:23:56

回答

0

您可以使用call_user_func_array

但是,您应该简单地传递参数数组($arguments)并将其用于其他方法。

+0

“你应该简单地传递参数数组” - 另一种方法是第三方对象,它不需要一个参数数组,我不能改变这个, – 2012-07-16 15:20:48

+0

@JonCram:考虑我的第二部分答案没用,其中案件。如果其他用户遇到同样的问题,我会留下以供将来参考,只有他可以更改其代码的结构。 – 2012-07-16 15:24:01

3

您正在谈论call_user_func_array(),我想。但使用它并不是一个好习惯。这很慢。

call_user_func_array(array($this->externalObject, "methodName"), $arguments); 
+0

如果使用诸如APC之类的操作码缓存,这种性能问题的重要性较低? – 2012-07-16 15:23:14

-1

尝试使用类示例扩展ThirdPartyObject,然后为要传递的变量设置默认值。

+0

在这种特定情况下,Example是一个Symfony2实体,ThirdPartyObject是Doctrine EntityRepository。这是行不通的。 – 2012-07-16 15:21:50

1

是,使用call_user_func_array(),就像这样:

$this->thirdPartyObject = new ThirdPartyObject(); 
call_user_func_array(array($this->externalObject, 'methodName'), $arguments); 
相关问题