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

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Artigo::

Boa noite a todos,

estou com esse problema: Fatal error: Uncaught ArgumentCountError: Too few arguments to function Artigo::construct(), 0 passed in C:\xampp\htdocs\blog\index.php on line 6 and exactly 1 expected in C:\xampp\htdocs\blog\artigo.php:5 Stack trace: #0 C:\xampp\htdocs\blog\index.php(6): Artigo->construct() #1 {main} thrown in C:\xampp\htdocs\blog\artigo.php on line 5

já revisei todo o código e não sei qual lugar posso está errando. podem me ajudar?

index.php

<?php

require 'conexao.php';

include 'artigo.php';
$artigo = new Artigo();
$artigos = $artigo->exibirTodos();


?>

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <title>Meu Blog</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="style.css">
</head>

<body>
        <div id="container">
            <h1>Meu Blog</h1>
            <?php foreach ($artigos as $artigo) : ?>
                <h2>
                    <a href="<?php echo $artigo['link'];?>">
                        <?php echo $artigo['titulo']; ?>
                    </a>
                </h2>
                <p>
                    <?php echo $artigo['conteudo']; ?>
                </p>
            <?php endforeach; ?>
        </div>

</body>

</html>

conexao.php

<?php

$mysql = new mysqli('localhost','root','','blog');
$mysql->set_charset('utf8');


if($mysql == FALSE)
{
    echo 'erro ao conectar';
}

?>

artigo.php

<?php
class Artigo
{
    private $mysql;
    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

    public function exibirTodos(): array
    {
        $resultado = $this->mysql->query('SELECT * FROM artigos');
        $artigos = $resultado->fetch_all(MYSQLI_ASSOC);

        return $artigos;
    }
};

?>
2 respostas
solução!

Depois de passar horas conseguir identificar, passar o argumento $mysql, estava faltando.

$artigo = new Artigo($mysql);

não havia passado os parâmetros correto dentro do

<a href="<?php echo $artigo['link'];?>">

<a hef="index.php?id=<?php echo $artigo['id']; ?>">

Olá Herles, tudo bem?

Dando uma olhada geral no código que você postou e seu problema, notei o uma falha no código (me corrija se estiver errado)

No seu documento "artigo.php" você cria um construtor que precisa receber 1 parâmetro para ser criado.

/* Trecho do seu código, aqui parece que vc queria receber a sua conexão SQL */
    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

No entanto, note que no seu arquivo "index.php", ao criar um objeto do tipo "Artigo", você não passou nenhum parâmetro para o construtor.

<?php

require 'conexao.php';

include 'artigo.php';
$artigo = new Artigo(); /* <- aqui */
$artigos = $artigo->exibirTodos();


?>

Provavelmente este é o motivo do seu problema, tente adicionar um retorno da sua variável de conexão no arquivo de "conexao.php" e passar a mesma para a chamada do novo objeto de "Artigo", provisoriamente poderá resolver o seu problema!

Abraços!

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