Omar~ 87 Denunciar post Postado Agosto 7, 2019 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
gabrielms 0 Denunciar post Postado Agosto 7, 2019 @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
Omar~ 87 Denunciar post Postado Agosto 8, 2019 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