O use
passa o valor de uma ou mais variáveis para o escopo da função anonima tornando este valor acessível (herdando a variável), por exemplo se fizer isso:
<?php $a = 'Olá, mundo!'; $foo = function() { echo $a; }; $foo();
Vai acusar que a variável não foi definida, algo como:
PHP Notice: Undefined variable: a in exemplo.php on line 6
Mas se fizer isto:
<?php
$a = 'Olá, mundo!';
$foo = function() use ($a) {
echo $a;
};
$foo();
Será impresso o valor 'Olá, mundo!'
No framework Slim
a principal variável da aplicação é o $app
, mas para torna-la acessível ao escopo da função anonima é necessário o use
, se fizesse isto:
$app->get('/pessoas/', function() { (new \controllers\Pessoa($app))->listar(); });
Teria um erro semelhante:
PHP Notice: Undefined variable: app in exemplo.php on line 9
E o seu controlador iria obter um valor null
ao invés do objeto new \Slim\App;
Doc: http://php.net/manual/en/functions.anonymous.php
Extras
- Um detalhe, ao usar
use
a variavel$a
do exemplo não é uma referencia, se fizer algo como: <?php $a = 1; $foo = function() use ($a) { $a += 10; }; $foo(); echo $a;
Será exibido:1- Mas se fizer a referencia:
<?php $a = 1; $foo = function() use (&$a) { $a += 10; }; $foo(); echo $a;
Será exibido 11:11- Algo importante a se notar é que no PHP existe outro
use
, que é usado para criar apelidos para classes, assim: <?php use Foo\Bar\Baz; //é possivel chamar new Baz, sem o namespace completo use Foo\Bar\Baz as Test; //é possivel chamar new Test para se referir ao Foo\Bar\Baz
- Leia mais em https://pt.stackoverflow.com/a/151492/3635