Skip to content

O que é a palavra reservada “use” do PHP?

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

  1. Um detalhe, ao usar use a variavel $a do exemplo não é uma referencia, se fizer algo como:
  2. <?php $a = 1; $foo = function() use ($a) { $a += 10; }; $foo(); echo $a; Será exibido:1
  3. Mas se fizer a referencia:
  4. <?php $a = 1; $foo = function() use (&$a) { $a += 10; }; $foo(); echo $a; Será exibido 11:11
  5. Algo importante a se notar é que no PHP existe outro use, que é usado para criar apelidos para classes, assim:
  6. <?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
  7. Leia mais em https://pt.stackoverflow.com/a/151492/3635

Fonte: https://pt.stackoverflow.com/questions/172133/qual-%C3%A9-a-finalidade-do-comando-use-e-qual-%C3%A9-a-sua-rela%C3%A7%C3%A3o-com-fun%C3%A7%C3%B5es-anonimas

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.