Можно ли передавать параметры по ссылке с помощью call_user_func_array ()?

При использовании call_user_func_array() я хочу передать параметр по ссылке. Как бы я это сделал. Например

 function toBeCalled( &$parameter ) { //...Do Something... } $changingVar = 'passThis'; $parameters = array( $changingVar ); call_user_func_array( 'toBeCalled', $parameters ); 

    Для передачи по ссылке с помощью call_user_func_array() параметр в массиве должен быть ссылкой – он не зависит от определения функции, передается ли он по ссылке. Например, это будет работать:

     function toBeCalled( &$parameter ) { //...Do Something... } $changingVar = 'passThis'; $parameters = array( &$changingVar ); call_user_func_array( 'toBeCalled', $parameters ); 

    См. Примечания к документации функции call_user_func_array() для получения дополнительной информации.

    Непосредственно, это может быть невозможно – однако, если у вас есть контроль как над выполняемой вами функцией, так и с кодом, который ее вызывает, – тогда есть одна работа, которую вы можете найти подходящей.

    Не могли бы вы включить встроенную переменную в объект? Код выглядел бы (несколько), если бы вы это сделали.

     function toBeCalled( $par_ref ) { $parameter = $par_ref->parameter; //...Do Something... $par_ref->parameter = $parameter; } $changingVar = 'passThis'; $parembed = new stdClass; // Creates an empty object $parembed->parameter = array( $changingVar ); call_user_func_array( 'toBeCalled', $parembed ); 

    Вы видите, что объектная переменная в PHP – это просто ссылка на содержимое объекта. Поэтому, если вы передаете объект функции, любые изменения, которые делает функция для содержимого объекта, будут отражены в том, что вызов функция также имеет доступ.

    Просто убедитесь, что вызывающая функция никогда не выполняет присваивание самой переменной объекта – или это приведет к тому, что функция перестанет ссылаться. Любой оператор присваивания, который выполняет функция, должен строго соответствовать содержимому объекта.

    Это работает путем двойного обращения, исходная переменная изменяется при изменении переменной параметра $.

     $a = 2; $a = toBeCalled($a); echo $a //50 function toBeCalled( &$par_ref ) { $parameter = &$par_ref; $parameter = $parameter*25; } 

    Кроме того, вы используете устаревшую функциональность. Вы будете генерировать предупреждение в PHP5, делая его менее совершенным.

    Предупреждение: время прохода по ссылке устарело; Если вы хотите передать его по ссылке, измените объявление имени функции выполнения. Если вы хотите включить call-by-reference call-time, вы можете установить allow_call_time_pass_reference в true в вашем INI-файле в …

    К сожалению, как я могу обнаружить, похоже, нет другого варианта.