Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 参数数目未知的方法能否调用另一个参数数目未知的方法?_Php - Fatal编程技术网

Php 参数数目未知的方法能否调用另一个参数数目未知的方法?

Php 参数数目未知的方法能否调用另一个参数数目未知的方法?,php,Php,可能重复: 我在基类中有一个方法,可以接受任意数量的参数。此方法需要调用第三方对象的方法,该方法可以使用传递给第一个方法的参数接受任意数量的参数 我提到,它是一个第三方对象,被调用是为了加强被调用方法的签名不能修改为接受数组或对象的约束 例如: <?php class Example { private $thirdPartyObject = null; public function methodOne() { $arguments = f

可能重复:

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

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

例如:

<?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');
您可以使用


但是,您应该简单地传递参数数组(
$arguments
),并在另一个方法中使用它。

我想您正在谈论的是()。但是使用它并不是一个好的实践。它相当慢

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

尝试使用class Example extends ThirdPartyObject,然后为要传递的变量设置默认值。

是的,使用,如下所示:

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

你试过了吗?:“DES:谢谢你的建议,我的搜索没有找到它。”你应该简单地通过参数数组“-另一种方法是一个第三方对象,它不采取一系列参数,我不能改变这一点,”JonCram:考虑我的第二部分的答案在这种情况下是无用的。我将留作将来参考,以防其他用户有相同的问题,只有他可以更改其代码的结构。在这种特定情况下,示例是Symfony2实体,第三方对象是Doctrine EntityRepository。如果使用像APC这样的操作码缓存,这些性能问题是否意义不大?
$this->thirdPartyObject = new ThirdPartyObject();
call_user_func_array( array( $this->externalObject, 'methodName'),  $arguments);