Erro Undefined variable: conexao [RESOLVIDO]

2 respostas Resolvido
php
V

Gente, estou aprendendo um pouco de PHP e tentando usar POO. Seguindo um tutorial, criei uma classe para gerenciar os dados e chamei ela numa página para mostrar os dados recuperados do banco. Ela até exibe os dados, porém diz que a variável $conexao não foi definida, mas ela foi. Alguém poderia me ajudar a encontrar o problema?

A classe responsável por conectar e buscar informações no banco de dados:

BancoDeDados.php

<?php

    class BancoDeDados{
        protected $conexao = null;
        
        public function conectar(){
            $this->$conexao = new PDO("mysql:host=localhost;dbname=banco_de_teste", "root", null);
        }

        public function getTodasAsFotos(){
            $sqlQuery = "SELECT nome_do_arquivo, extensao FROM arquivos";
            $query = $this->$conexao->prepare($sqlQuery);
            $query->execute();
            return $query;
        }

    }

?>

O arquivo que exibe as informações, exibe-fotos.php:

<?php
    require '../models/BancoDeDados.php';
    $dados = new BancoDeDados();
    $dados->conectar();
    $topicos = $dados->getTodasAsFotos();
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="..\views\css\style.css">
    <title>Document</title>
</head>
    <body>
        <main>
            <table>
                <thead>
                    <th>nome do arquivo</th>
                    <th>extensao</th>
                </thead>
                <tbody>
                    <?php foreach($topicos as $topico): ?>
                    <tr>
                        <td> <?= $topico['nome_do_arquivo'] ?> </td>
                        <td> <?= $topico['extensao'] ?> </td>
                    </tr>
                    <?php endforeach?>
                </tbody>
            </table>
        </main>
    </body>
</html>

Erro exibido na ela:

Estrutura das pastas:

estrutura%20das%20pastas

2 Respostas

L
Solucao aceita

Eu manjo zero de PHP, mas baseado na sua dúvida eu fui pesquisar e encontrei o seguinte: quando você faz isso: $this->$conexao, você está usando uma feature do PHP chamada variáves variáveis. É uma espécie de reflection. O $conexao é substituído pelo valor da variável conexão. Por exemplo, se o valor de $conexao for "foo", é como se $this->$conexao fosse traduzido para $this->foo. Provavelmente se você remover os $ depois das flechas vai resolver: $this->conexao.

Tem mais detalhes aqui: https://www.php.net/language.variables.variable

Tenta aí e diz se deu certo!

V

@lvbarbosa, é isso mesmo! Problema resolvido! Valeu pela ajuda! :smiley: :blush:

Criado 11 de dezembro de 2019
Ultima resposta 11 de dez. de 2019
Respostas 2
Participantes 2