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:

  Mostrar conteúdo oculto

 

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.