Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Primeiramente eu fiz essa classe aqui, cujo o objetivo é ela encontrar por sí própria um arquivo e dar include no mesmo.... vejamos:
Spoiler
<?php
class QueryPages {
private static $FileName;
private static $FileExists;
private static $FilePath;
public static function openGet($urlFile) {
self::$FileName = (isset($urlFile) && !empty($urlFile) ? $urlFile : '404' );
self::findFile();
if (self::$FileExists) {
include (self::$FilePath);
} else {
include (self::basePath('test_c') . 'outro.php');
//die("Erro ao encontrar arquivo");
}
}
private static function findFile() {
self::$FileExists = false;
foreach (self::getDir() as $dirPage) {
if (file_exists(self::basePath($dirPage) . self::$FileName . '.php') && !is_dir(self::basePath($dirPage) . self::$FileName)) {
self::$FilePath = self::basePath($dirPage) . self::$FileName . '.php';
self::$FileExists = true;
}
}
}
private static function getDir() {
return (['test_a', 'test_b']);
}
private static function basePath($path) {
return (
__DIR__
. DIRECTORY_SEPARATOR
. '..'
. DIRECTORY_SEPARATOR
. 'modules'
. DIRECTORY_SEPARATOR
. $path
. DIRECTORY_SEPARATOR
);
}
}
Basicamente então tenho dois diretórios (test_a e test_b) digamos então que dentro de test_a eu tenha um arquivo chamado exemplo.php
Então para que o arquivo seja incluído basta eu chamar o método
**QueryPages::openGet('exemplo');**
Certo funciona beleza como era de se esperar.
Aqui então entra o termo que quero chegar...
Se eu criar uma variável qualquer no arquivo que chama o método para incluir, o arquivo incluso não reconhece essa variável.
O interessante que se substituir o include pela classe e retornar o arquivo com seu diretório como string então dar o include chamando o método da classe, o arquivo que será incluído reconhece a variável criada...
// Substiuíndo isso
//include (self::$FilePath);
// Por isso:
return (self::$FilePath); // Ao invés de incluír o arquivo o método retorna o local dele como string
Então a forma de uso passa a ser
**include (QueryPages::openGet('exemplo'));**
Alguém teria conhecimento ou uma teoria sobre o porque da classe incluir o arquivo, esse mesmo arquivo perde toda orientação do documento anterior?
Uma vez que nada se muda em ambos os casos.Realmente, quando se dar include em um arquivo ele passa a fazer parte do documento que o chamou.
Assim sendo o arquivo incluído reconhece tudo.
No caso da classe ela é quem faz o include, logo o arquivo só irá reconhecer o que está no arquivo da class ("não a classe nem os dados dela, porque isso já é outra história")
@Omar~ Quando você faz um include dentro de um método, esse include só vai herda o escopo do método e não do arquivo raiz.
Vou fazer um exemplo para você entender melhor, nesse exemplo vou criar dois arquivo um com o nome de pai, que vai fazer o include, e o outro com o nome de filho, que vai fazer algumas verificações.
pai.php
{ { global $variavelLocal; // Pegando a variável 'variavelLocal' e colocando dentro do escorpo do método include("filho.php"); // Incluindo o arquivo direto incluirArquivo(); // Incluido o arquivo por meio do método incluirArquivo incluirArquivo_2(); // Incluido o arquivo por meio do método incluirArquivo_2if(isset($variavelLocal))
{
else
{
if(isset($variavelLocalMetodo))
{
else
{
// Resultato 01
Nesse exemplo eu encontrei a variável 'variavelLocal' com o valor: 100
Nesse exemplo eu não encontrei a variável 'variavelLocalMetodo'
===============================
// Resultato 01
Nesse exemplo eu não encontrei a variável 'variavelLocal'
Nesse exemplo eu encontrei a variável 'variavelLocalMetodo' com o valor: 200
===============================
// Resultato 02
Nesse exemplo eu encontrei a variável 'variavelLocal' com o valor: 100
Nesse exemplo eu encontrei a variável 'variavelLocalMetodo' com o valor: 300
===============================
Aqui tem um artigo falando melhor sobre: https://www.php.net/manual/pt_BR/function.include.php.