我目前有这种形式的类方法/函数:
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)
一样,但我很好奇是否可以通过引用传递上述函数定义。如果它是我宁愿使用它。)
答案 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()
的结果,解释每个参数的真实含义。
非常丑陋,并且为以后不想维护的代码做出了贡献:)