Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Notei que nos frameworks que utilizam namespaces, como o Zend 2 não referenciam o caminho completo e gostaria de saber como isto pode ser feito:
Ex - Diretorio library/Zend/Form/Form.php = namespace Zend\Form\(classe)Form.
Outro Ex: application/module/PageController/src/PageController/Controller/PageController.php = namespace PageController\Controller\(classe)PageController
Isto seria excelente já que poderia com mais facilidade importar componentes para meu FW.
Acho que você não entendeu.
Eu estou falando que por exemplo as namespaces do Zend não são da estrutura inteira, isso é feito de maneira manual? Se sim, como fazer.
Me desculpe, entendi o que este set_include_path faz e resolvi meu problema, obrigado :clap:
Pelo que sei, este efeito não é devido aos namespaces, que servem na verdade para permitir que uma aplicação possa ter mais de uma classe com o mesmo nome. O que evita conflitos entre classes diversas de terceiros sem que seja preciso o uso de prefixos nos nomes.
Isso funciona porque a parte inicial do caminho já está no INCLUDE_PATH do PHP. O INCLUDE_PATH é uma string com caminhos separados por um caractere especial, geralmente ';' ou ':'. Este caractere está na constante interna PATH_SEPARATOR.
Se o INCLUDE_PATH for, por exemplo:
.:/php/includes
O caractere ':' é o separador e há dois caminhos:
".", que significa o diretório atual
"/php/includes"
Quando você usar require/include/require_once/include_once sem indicar o caminho completo para o arquivo, o PHP irá procurar nos dois caminhos do INCLUDE_PATH.
A função get_include_path retorna o INCLUDE_PATH atual enquanto set_include_path o redefine.
Você pode criar uma função para adicionar um caminho (para as classes, modelos e controladores da sua aplicação, por exemplo) ao INCLUDE_PATH da seguinte forma: