1
resposta

O método não recebe o Array

Eu tenho a seguinte classe:

<?php

class CalculaMedia
{
    public function calculaMedia(array $notas)
    {
        if(sizeof($notas) > 0){
            $somaDasNotas = 0;
            for ($n = 0; $n < sizeof($notas);$n++)
            {
                $somaDasNotas += $notas[$n];
            }
            $media = $somaDasNotas/sizeof($notas);
            return $media;
        }
        return null;
    }
}

E o seguinte código executando a classe:

<?php

require_once 'CalculaMedia.php';

$notas = [7, 9.5, 7, 8.6, 7, 9, 10, 4];
$calculadora  = new calculaMedia();
echo "a media é: ". $calculadora->calculaMedia($notas);

Mas quando eu executo o código tanto no cmd quanto no servidor ele responde o seguinte erro:

"Fatal error: Uncaught ArgumentCountError: Too few arguments to function CalculaMedia::calculaMedia(), 0 passed"

Resolvi reescrever o código, o método ficou assim:

<?php

class Calculadora
{   

    public function calculaMedia(array $valores): ?float
    {
        $quantidadeDeValores = sizeof($valores);
        if($quantidadeDeValores > 0){
            $somaDosValores = 0;
            for($n = 0; $n < $somaDosValores; $n++){
                $somaDosValores += $valores[$n];
            }
            return $somaDosValores/$quantidadeDeValores;
        }
        return null;
    }
}

e o Código que o executa ficou assim:

<?php

require_once 'CalculadoraDeMedia.php';

$notas = [7, 9.5, 7, 8.6, 7, 9, 10, 4];
$calculadora  = new  Calculadora();
echo "a media é: ". $calculadora->calculaMedia($notas);

Dessa vez eu tenho a seguinte resposta:

"a media é: 0"

Aparentemente o problema se mantêm no entre o array e o método, mas não consegui descobrir qual é.

Eu estou usando a versão 7.3 do PHP.

1 resposta

Na sua segunda implementação, o retorno está sendo 0 porque você definiu o valor de escape da estrutura de repetição errado: $n < $somaDosValores quando deveria ser $n < $quantidadeDeValores, da forma como está, o algoritmo nunca vai executar as instruções de dentro do for