1
resposta

nao estou conseguindo resolver esse erro

erro ( ! ) Fatal error: Uncaught TypeError: Argument 1 passed to TocadorDeMusica::adicionarMusicas() must be an instance of SplFixedArray, string given, called in C:\wamp1\www\bismarque\alura\phpcollections\aula1.php on line 20 and defined in C:\wamp1\www\bismarque\alura\phpcollections\TocadorDeMusica.php on line 15 ( ! ) TypeError: Argument 1 passed to TocadorDeMusica::adicionarMusicas() must be an instance of SplFixedArray, string given, called in C:\wamp1\www\bismarque\alura\phpcollections\aula1.php on line 20 in C:\wamp1\www\bismarque\alura\phpcollections\TocadorDeMusica.php on line 15


<?php 

//error_reporting(0);
class TocadorDeMusica {

    private $musicas;


    public function __construct() {

        //spldoublylinkedlist lista ligada
        $this->musicas = new SplDoublyLinkedList();
        $this->musicas->rewind();
    }
    public function adicionarMusicas(SplFixedArray $musicas) {
    for($musicas->rewind(); $musicas->valid(); $musicas->next()) {
        $this->musicas->push($musicas->current());
    }
    $this->musicas->rewind();
    }

    public function tocarMusica() {
    if ($this->musicas->count() === 0) {
        echo "Nenhuma música encontrada<br>";
    } else {
        echo "Tocando música: " . $this->musicas->current() . "<br>";
    }
    }

    public function adicionarMusica($musica) {
    $this->musicas->push($musica);
    }
    public function avancarMusica($musica) {
    $this->musicas->next();

    if(!$this->musicas->valid()) {
        $this->musicas->rewind();
    }
    }
public function voltarMusica($musica) {
    $this->musicas->prev();

    if(!$this->musicas->valid()) {
        $this->musicas->rewind();
    }
}
}
?>
1 resposta

Oi Bismarque, tudo bem?

Vamos analisar um pouco o erro:

O erro que obtivemos foi um Fatal error, analisando a mensagem abaixo:

Fatal error: Uncaught TypeError: Argument 1 passed to TocadorDeMusica::adicionarMusicas() must be an instance of SplFixedArray, string given, called in C:\wamp1\www\bismarque\alura\phpcollections\aula1.php on line 20

Conseguimos ver que o tipo de erro foi um TypeError, que acontece quando temos uma incompatibilidade de tipos (tipos são objeto, string, int, essas coisas :) ).

Decifrando ainda mais a mensagem, vimos que ela aconteceu na linha 20 do arquivo aula1.php, nessa linha existe uma chamada para o método adicionarMusicas, onde o argumento número 1 (o primeiro), foi passado uma string (que é o texto que deixamos entre aspas " "), quando na verdade ela espera que seja passado um objeto do tipo SplFixedArray (que instanciamos com a palavra new).

Então você deve instânciar esse objeto e passar ele para o método, pois atualmente você está passando uma string, ficaria mais ou menos assim:

$musicas = new SplFixedArray(4);

$musicas[0] = "One Dance";
$musicas[1] = "Closer";
$musicas[2] = "rockstar";
$musicas[3] = "Love Yourself";

$tocador = new TocadorDeMusica();
$tocador->adicionarMusicas($musicas);

Mas se tiver qualquer dúvida, posta o arquivo aula1.php que eu posso te ajudar melhor :)