use() utiliza las variables al momento en el que se declara la función, y no cuando se la llama.
Para que se use la variable después se añade &:
Código PHP:
Ver original<?php
$fn = function () use (&$country) { echo $country . "<br />"; };
$country = 'Puerto Rico';
$fn();
$country = 'Europa';
$fn = function () use (&$country) { echo $country . "<br />"; };
$country = 'Puerto Rico';
$fn();
$country = (object
)array('name' => 'Europa'); $fn = function () use (&$country) { echo $country->name . "<br />"; };
$country = (object
)array('name' => 'Puerto Rico'); $fn();
$country = (object
)array('name' => 'Europa'); $fn = function () use (&$country) { echo $country->name . "<br />"; };
$country->name = 'Puerto Rico';
$fn();
Y el ultimo ejemplo si funciona correctamente porque al pasar el objeto como parámetro, lo que se pasa es el identificador del mismo, osea que si se cambia el valor después si lo toma.. o eso creo