Ir para conteúdo
Omar~

É a mesma coisa mas não funciona do mesmo jeito

Recommended Posts

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

<?php

$variavelLocal = 100;

function incluirArquivo()
{
  	$variavelLocalMetodo = 200;
	include("filho.php");
}

function incluirArquivo_2()
{
    global $variavelLocal; // Pegando a variável 'variavelLocal' e colocando dentro do escorpo do método
    $variavelLocalMetodo = 300;
	include("filho.php");
}

echo("// Resultato 01 <br>");
include("filho.php"); // Incluindo o arquivo direto
echo("=============================== <br><br>");

echo("// Resultato 01 <br>");
incluirArquivo(); // Incluido o arquivo por meio do método incluirArquivo
echo("=============================== <br><br>");

echo("// Resultato 02 <br>");
incluirArquivo_2(); // Incluido o arquivo por meio do método incluirArquivo_2
echo("=============================== <br><br>");

 

filho.php

<?php

if(isset($variavelLocal))
{
    echo("Nesse exemplo eu encontrei a variável 'variavelLocal' com o valor: ".$variavelLocal."<br>");
}
else
{
    echo("Nesse exemplo eu não encontrei a variável 'variavelLocal' <br>");
}

if(isset($variavelLocalMetodo))
{
    echo("Nesse exemplo eu encontrei a variável 'variavelLocalMetodo' com o valor: ".$variavelLocalMetodo."<br>");
}
else
{
    echo("Nesse exemplo eu não encontrei a variável 'variavelLocalMetodo' <br>");
}

O resultado :

// 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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