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

Мы могли бы сделать это функциональным способом, используя every ( https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/every )

function compareArrays(array1, array2) {
    if (array1.length === array2.length)
        return array1.every((a, index) => a === array2[index])
    else
        return false
}

// test
var a1 = [1,2,3];
var a2 = [1,2,3];

var a3 = ['a', 'r', 'r', 'a', 'y', '1']
var a4 = ['a', 'r', 'r', 'a', 'y', '2']

console.log(compareArrays(a1,a2)) // true
console.log(compareArrays(a1,a3)) // false
console.log(compareArrays(a3,a4)) // false

45
задан Steven Oxley 17 November 2008 в 16:43
поделиться

2 ответа

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

function toBeCalled( &$parameter ) {
    //...Do Something...
}

$changingVar = 'passThis';
$parameters = array( &$changingVar );
call_user_func_array( 'toBeCalled', $parameters );

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

53
ответ дан Steven Oxley 23 September 2019 в 10:54
поделиться

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

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

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

-2
ответ дан 26 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: