Ir para conteúdo

POWERED BY:

Arquivado

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

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

×

Informação importante

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