在PHP5中使用func_get_args()通过引用传递变量?

时间:2011-09-07 16:11:44

标签: php

我目前有这种形式的类方法/函数:

function set_option(&$content,$opt ,$key, $val){

   //...Some checking to ensure the necessary keys exist before the assignment goes here.

   $content['options'][$key][$opt] = $val;

}

现在,我正在研究修改函数以使第一个参数可选,允许我只传递3个参数。在这种情况下,使用类属性content代替我省略的属性。

首先想到的是使用func_num_args()& func_get_args()与此相结合,如:

function set_option(){

    $args = func_get_args();

    if(func_num_args() == 3){

        $this->set_option($this->content,$args[0],$args[1],$args[2]);

    }else{

       //...Some checking to ensure the necessary keys exist before the assignment goes here.

       $args[0]['options'][$args[1]][$args[2]] = $args[3];

   }

}

如何指定我将此第一个参数作为参考传递? (我使用的是PHP5,因此指定变量通过函数调用的引用传递并不是我最好的选择之一。)

(我知道我可以修改参数列表,以便最后一个参数是可选的,就像function set_option($opt,$key,$val,&$cont = false)一样,但我很好奇是否可以通过引用传递上述函数定义。如果它是我宁愿使用它。)

1 个答案:

答案 0 :(得分:4)

如果函数声明中没有参数列表,则无法将参数用作参考。你需要做的是像

function set_option(&$p1, $p2, $p3, $p4=null){

    if(func_num_args() == 3){
        $this->set_option($this->content,$p1, $p2, $p3);
    }else{
        $p1['options'][$p2][$p3] = $p4;
    }
}

因此,根据func_num_args()的结果,解释每个参数的真实含义。

非常丑陋,并且为以后不想维护的代码做出了贡献:)