1
resposta

erro

PS C:\Users\Helena\OneDrive\Área de Trabalho\php\php> php screen-match.php
bem-vindo(a) ao screen match!

Fatal error: Uncaught DivisionByZeroError: Division
by zero in C:\Users\Helena\OneDrive\Área de Trabalho\php\php\screen-match.php:30
Stack trace:
#0 {main}
thrown in C:\Users\Helena\OneDrive\Área de Trabalho\php\php\screen-match.php on line 30
PS C:\Users\Helena\OneDrive\Área de Trabalho\php\php>

<?php

function exibeMensagemLancamento($ano) {
    if ($ano > 2022)
    {
        echo "Esse filme é um lançamento\n";
    }elseif($ano > 2020 && $ano <= 2022) {
        echo "Esse filme ainda é novo\n";
    }else {
        echo "Esse filme não é um lançamento\n";
    }
}

echo "bem-vindo(a) ao screen match!\n";

$nomeFilme = "Top Gun - Maverick";
$nomeFilme = "Thor: Ragnarok";
$nomeFilme = "Se beber não case";

$anoLancamento = 2022;

$quantidadeDeNotas = $argc -1;
$notas = [];

for ($contador = 1; $contador < $argc; $contador++) {
    $notas [] = (float) $argv[$contador];
}


$notaFilme = array_sum ($notas) / $quantidadeDeNotas;
$planoPrime = true;

$incluidoNoPlano = $planoPrime || $anoLancamento < 2020;

echo "Nome do Filme: " . $nomeFilme . "\n";
echo "Nota do Filme: $notaFilme\n";
echo "Ano de lançamento: $anoLancamento\n";

exibeMensagemLancamento($anoLancamento);

$genero = match ($nomeFilme){
    "Top Gun - Maverick" => "Ação\n",
    "Thor: Ragnarok" => "Super Herói\n",
    "Se beber não case" => "Comédia\n",
    default => "genero desconhecido\n",
};

echo " O genero do filme é: $genero\n";

$filme = [
    "nome" => "thor ",
    "ano" => 2021 ,
    "nota" => 7.8 ,
    "genero" => "super heroi ",
];

echo $filme ["ano"];
1 resposta

Olá tudo bem?
O código em si não tem erro de sintaxe, mas tem alguns problemas bem comuns que costumam causar erro ou comportamento estranho dependendo de como você está executando o PHP.
Segue abaixo algumas dicas e boas praticas que podem ajudar:
$argc e $argv só funcionam no terminal
Esse é o erro mais comum.

$quantidadeDeNotas = $argc -1;

$argc e $argv só existem quando o script é executado via CLI (terminal).
Se você rodar isso no navegador (XAMPP, WAMP, etc), vai dar erro tipo:

  • Undefined variable $argc

Execute assim no terminal:

php arquivo.php 8 9 10

Ou, se for rodar no navegador, não use $argc e $argv e defina as notas manualmente:

$notas = [8, 9, 10];
$quantidadeDeNotas = count($notas);

Se você rodar o script sem passar notas, isso aqui quebra:

$notaFilme = array_sum($notas) / $quantidadeDeNotas;

Correção segura

if ($quantidadeDeNotas > 0) {
    $notaFilme = array_sum($notas) / $quantidadeDeNotas;
} else {
    $notaFilme = 0;
}

Você está sobrescrevendo o nome do filme:

$nomeFilme = "Top Gun - Maverick";
$nomeFilme = "Thor: Ragnarok";
$nomeFilme = "Se beber não case";

No final, só o último vale:

$nomeFilme === "Se beber não case";

Escolha apenas um

$nomeFilme = "Se beber não case";

Ou use um array se quiser vários.
match exige PHP 8+

$genero = match ($nomeFilme) {

Se sua versão for PHP 7 ou inferior, isso dá erro fatal.
Verifique a versão:

php -v

Se for PHP < 8, troque por switch.
Pequeno detalhe de formatação
Você já tem \n dentro do match e no echo:

echo " O genero do filme é: $genero\n";

Isso causa linha extra (não é erro, só estética).
Código ajustado (versão CLI segura)

<?php

function exibeMensagemLancamento($ano) {
    if ($ano > 2022) {
        echo "Esse filme é um lançamento\n";
    } elseif ($ano >= 2020) {
        echo "Esse filme ainda é novo\n";
    } else {
        echo "Esse filme não é um lançamento\n";
    }
}

echo "Bem-vindo(a) ao Screen Match!\n";

$nomeFilme = "Se beber não case";
$anoLancamento = 2022;

$notas = [];
for ($contador = 1; $contador < $argc; $contador++) {
    $notas[] = (float) $argv[$contador];
}

$quantidadeDeNotas = count($notas);
$notaFilme = $quantidadeDeNotas > 0 ? array_sum($notas) / $quantidadeDeNotas : 0;

echo "Nome do Filme: $nomeFilme\n";
echo "Nota do Filme: $notaFilme\n";
echo "Ano de lançamento: $anoLancamento\n";

exibeMensagemLancamento($anoLancamento);

$genero = match ($nomeFilme) {
    "Top Gun - Maverick" => "Ação",
    "Thor: Ragnarok" => "Super Herói",
    "Se beber não case" => "Comédia",
    default => "Gênero desconhecido",
};

echo "O gênero do filme é: $genero\n";

Teste ai e avisa alguma duvida.
Bons estudos.