Вы можете сделать это:
$external = 1;
$change = function($number) use(&$external) {
$external = $number;
};
$change(5);
echo $external; //> 5
Но вы не можете сделать это:
$external = 1;
function change($number) use(&$external) {
$external = $number;
}
Вы получите:
Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное использование (T_USE), ожидание ‘{‘.
Какие есть альтернативы?
use()
используется только в замыканиях для наследования переменных из родительской области. Из руководства:
Замыкания также могут наследовать переменные из родительской области. Любые такие переменные должны быть переданы в конструкцию языка использования.
Если вы хотите использовать переменную по ссылке в обычной функции, используйте:
$external = 1;
function change($number, &$external) {
$external = $number;
}
change(5, $external);
Или, чтобы не передать его, используйте его как глобальный (если $external
находится в глобальном масштабе):
$external = 1;
function change($number) {
$GLOBALS['external'] = $number;
}
change(5);
Других решений пока нет …