Подтвердить что ты не робот

Передать переменную по ссылке с func_get_args() в PHP5?

В настоящее время у меня есть метод/функция класса в этой форме:

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), но мне любопытно, может ли передача по ссылке в сочетании с определениями функций, как указано выше. я бы предпочел использовать его.)

4b9b3361

Ответ 1

Без списка параметров в объявлении функции нет способа использовать аргумент в качестве ссылки. То, что вам нужно сделать, это что-то вроде

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(), интерпретируйте, каков каждый параметр.

Довольно уродливый и делает код, который вы не хотели бы поддерживать позже:)