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

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)一样,但是我很好奇是否可以与上述函数定义一起通过引用传递。如果是,我宁愿用它。)

最佳答案

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

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()的结果,解释每个参数的实际含义。

非常难看,并且使得您以后不想维护的代码:)

关于php - 在PHP5中使用func_get_args()通过引用传递变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7337098/

10-16 18:51