Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Dúvida no Ex. 2 da Aula 7 - Autoloading de classes

Não está funcionando.

<?php

function customAutoload($className) {

if (file_exists($className . '.php'))

{

require_once 'class/' . $className . '.php';

}

}

spl_autoload_register('customAutoload');

7 respostas

Oi Douglas tudo bom ?

qual a mensagem de erro que aparece ? Cola aqui para entender melhor o que está acontecendo.

Abraços!

Fatal error: Class 'Categoria' not found in /var/www/html/estudos/lojaOO/class/produtoDAO.php on line 18

segue produtoDAO.php.

<?php require_once("conecta.php"); require_once("class/autoload.php");

class ProdutoDAO{

private $conexao;

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

function listaProdutos() { $produtos = array(); $resultado = mysqli_query($this->conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id"); while($produto_atual = mysqli_fetch_assoc($resultado)) {

$categoria = new Categoria; $categoria->setNome($produto_atual['categoria_nome']);

a linha 18 é " $categoria = new Categoria;"

o arquivo categoria.php está na pasta class

Opa Douglas, tenta remover o arquivo autoload.php para fora da pasta class, deixa na raiz do projeto e tenta novamente.

Abraços.

Resolveu parcialmente.

O autoload agora está no raiz. Um dos problemas foi que não tinha o 'class/' no if. Comentei o if e já com o arquivo no raiz e funcionou de primeira.

mas tenho outra duvida:

Devo colocar o require_once("autoload.php") em todos os arquivos? Quais situações precisa e não precisa?

Autoload anterior:

<?php function customAutoload($className) { if (file_exists($className . '.php')) { require_once 'class/' . $className . '.php'; } } spl_autoload_register('customAutoload');

Autoload alterado:

<?php function customAutoload($className) { if (file_exists('class/' . $className . '.php')) { require_once 'class/' . $className . '.php'; } } spl_autoload_register('customAutoload');

solução!

Oi Douglas, toda vez que você precisar usar alguma classe vai ser necessário colocar o require "autoload.php", não é o melhor dos mundos mas mesmo assim é bem melhor do que importar um arquivo para cada classe que for usar no código.

Valeu Renan, muito obrigado mesmo. Deus abençoe.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software