почему передача по ссылке не меняет значение переменной?

$string='string';
function change(&$str){
$str='str';
}
call_user_func('change',$string);
echo $string;

вывод «строка». но $ str ссылается на $ string, поэтому изменение в $ str также должно изменить $ string? почему значение все равно?

0

Решение

Это невозможно с call_user_func():

От PHP документация:

Обратите внимание, что параметры для call_user_func () не передаются по ссылке.

Тем не менее, вы все еще можете использовать call_user_func_array (). Использование ссылки теперь возможно. Вот код, который вы хотите:

function change(&$str)
{
$str='str';
}

$string='string';
$parameters = array(&$string);
call_user_func_array('change',$parameters);
echo $string;

Однако это решение в настоящее время устарело.

Вы все еще можете избавиться от call_user_func()и просто сделайте:

function change(&$str)
{
$str='str';
}

$string='string';
change($string);
echo $string;
2

Другие решения

http://php.net/manual/en/function.call-user-func.php

Это ясно, что параметры для call_user_func () не передаются по ссылке.

2

Вот ваше сообщение об ошибке:

<br />
<b>Warning</b>:  Parameter 1 to change() expected to be a reference, value given on line <b>5</b>

так как call_user_func не передает параметры по ссылке.

Попробуйте запустить это так:

$string='string';
function change(&$str){
$str='str';
}
change($string);
echo $string;
1

call_user_func не проходит по ссылке. От документы по PHP:

Обратите внимание, что параметры для call_user_func () не передаются по ссылке.

(change($string)с другой стороны, дает "str" как и следовало ожидать).

Дальнейшее чтение: Почему функция PHP call_user_func () не поддерживает передачу по ссылке?

1
По вопросам рекламы [email protected]