$string='string';
function change(&$str){
$str='str';
}
call_user_func('change',$string);
echo $string;
вывод «строка». но $ str ссылается на $ string, поэтому изменение в $ str также должно изменить $ string? почему значение все равно?
Это невозможно с 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;
http://php.net/manual/en/function.call-user-func.php
Это ясно, что параметры для call_user_func () не передаются по ссылке.
Вот ваше сообщение об ошибке:
<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;
call_user_func
не проходит по ссылке. От документы по PHP:
Обратите внимание, что параметры для call_user_func () не передаются по ссылке.
(change($string)
с другой стороны, дает "str"
как и следовало ожидать).
Дальнейшее чтение: Почему функция PHP call_user_func () не поддерживает передачу по ссылке?