Fatal error: Class 'Anexo' not found

php-mysql

#1

Boa tarde galera e boa tarde @evaldojuniorbento! Estou a ter o seguinte erro: Fatal error : Class ‘Anexo’ not found in C:\xampp\htdocs\tarefas\classes\RepositorioTarefas.php on line 105 no capitulo de orientação a objectos, nao sei o que esta a acontecer pois, ele diz que nao encontra a classe Anexo, no entanto existe uma classe chamada Anexo no diretorio classes. Eis a seguir o código da classe RepositorioTarefas:

<?php 

	class RepositorioTarefas {
		private $conexao;

		public function __construct($conexao) {
			$this->conexao = $conexao;
		}

		public function salvar(Tarefa $tarefa) {
			$nome = $tarefa->getNome();
			$descricao = $tarefa->getDescricao();
			$prioridade = $tarefa->getPrioridade();
			$prazo = $tarefa->getPrazo();
			$concluida = ($tarefa->getConcluida()) ? 1 : 0;

			if (is_object($prazo)) {
				$prazo = $prazo->format('Y-m-d');
			}

			$sqlGravar = "INSERT INTO tarefas
				(nome, descricao, prioridade, prazo, concluida)
				VALUES
				(
					'{$nome}',
					'{$descricao}',
					{$prioridade},
					'{$prazo}',
					{$concluida}
				)
			";

			$this->conexao->query($sqlGravar);
		}

		public function atualizar(Tarefa $tarefa) {
			$id = $tarefa->getId();
			$nome = $tarefa->getNome();
			$descricao = $tarefa->getDescricao();
			$prioridade = $tarefa->getPrioridade();
			$prazo = $tarefa->getPrazo();
			$concluida = ($tarefa->getConcluida()) ? 1 : 0;

			if (is_object($prazo)) {
				$prazo = $prazo->format('Y-m-d');
			}

			$sqlEditar = "UPDATE tarefas SET
					nome = '{$nome}',
					descricao = '{$descricao}',
					prioridade = {$prioridade},
					prazo = '{$prazo}',
					concluida = {$concluida}
				WHERE id = {$id}
			";

			$this->conexao->query($sqlEditar); 
		}

		# $tarefa_id = 0 e um parametro opcional do metodo
		public function buscar($tarefa_id = 0) {
			if ($tarefa_id > 0) {
				return $this->buscar_tarefa($tarefa_id);
			} else {
				return $this->buscar_tarefas();
			}
		}

		private function buscar_tarefas() {
			$sqlBusca = 'SELECT * FROM tarefas';
			$resultado = $this->conexao->query($sqlBusca);

			$tarefas = [];

			while ($tarefa = $resultado->fetch_object('Tarefa')) {
				$tarefa->setAnexos($this->buscar_anexos($tarefa->getId()));
				$tarefas[] = $tarefa;
			}

			return $tarefas;
		}

		private function buscar_tarefa($tarefa_id) {
			$sqlBusca = "SELECT * FROM tarefas WHERE id = {$tarefa_id}";
			$resultado = $this->conexao->query($sqlBusca);

			$tarefa = $resultado->fetch_object('Tarefa');
			$tarefa->setAnexos($this->buscar_anexos($tarefa->getId()));

			return $tarefa;
		}

		public function remover($tarefa_id) {
			$sqlRemover = "DELETE FROM tarefas WHERE id = {$tarefa_id}";

			$this->conexao->query($sqlRemover);
		}

		public function buscar_anexos($tarefa_id) {
			$sqlBusca = "SELECT * FROM anexos WHERE tarefa_id = {$tarefa_id}";
			$resultado = $this->conexao->query($sqlBusca);

			$anexos = array();

			while ($anexo = $resultado->fetch_object('Anexo')) {
				$anexos[] = $anexo;
			}

			return $anexos;
		}

		public function buscar_anexo($anexo_id) {
			$sqlBusca = "SELECT * FROM anexos WHERE id = {$anexo_id}";
			$resultado = $this->conexao->query($sqlBusca);

			return $resultado->fetch_object('Anexo');
		}

		public function salvar_anexo(Anexo $anexo) {
			$sqlGravar = "INSERT INTO anexos
				(tarefa_id, nome, arquivo)
				VALUES
				(
					{$anexo->getTarefaId()},
					'{$anexo->getNome()}',
					'{$anexo->getArquivo()}'
				)
			";

			$this->conexao->query($sqlGravar);
		}

		public function remover_anexo($id) {
			$sqlRemover = "DELETE FROM anexos WHERE id = {$id}";

			$this->database->query($conexao, $sqlRemover);
		}
	}

?>

A seguir irei mostrar o código da classe Anexo

    <?php 

	class Anexo {
		
		private $id = 0;
		private $tarefa_id;
		private $nome;
		private $arquivo;

		public function setId($id) {
			$this->id = (int) $id;
		}

		public function getId() {
			return $this->id;
		}

		public function setTarefaId($tarefa_id) {
			$this->tarefa_id = $tarefa_id;
		}

		public function getTarefaId() {
			return $this->tarefa_id;
		}

		public function setNome($nome) {
			$this->nome = $nome;
		}

		public function getNome() {
			return $this->nome;
		}

		public function setArquivo($arquivo) {
			$this->arquivo = $arquivo;
		}

		public function getArquivo() {
			return $this->arquivo;
		}
	}

?>

#2

Você está incluindo o arquivo da classe?

É necessário incluir o arquivo usando as funções include ou `require’ :slight_smile:


#3

Tem toda razão, o problema não estava com nenhum dos arquivos que apresentei acima, mas sim com o arquivo tarefas.php onde esqueci de fazer o include ou require do arquivo Anexo.php… vou agora certificar se todos os arquivos estão como deveriam… Muito obrigado, voce salvou o meu dia!


#4

:slight_smile: bons estudos! É normal cometer pequenos enganos no começo.