Kreirati klase za reprezentaciju albume,pesme i izvodjaca.Za izvodjaca se cuvaju ime,godina rodjenja i godina smrti.Svaki izvodjac mora imati metod koji vraca informaciju o tome da li je izvodjac ziv.Pesma mora da sadrzi naziv i informaciju o trajanju,kao i eventualne ostale korisne informacije.Pesma mora da sadrzi metod play koji nece raditi nista,samo ce ispisivati poruku(npr.playing naziv pesme,pri cemu je naziv pesme vrednost polja naziv objekta nad kojim je metod pozvan)Svaki album sadrzi podatke o izvodjacu (objekat klase izvodjac),listu pesama(objekti klase pesama),godinu izdavanja,naziv,muzicki pravac i slicno.Svaki album mora da sadrzi metod za prikaz svih pesama.Svaki album mora da sadrzi metod za prikaz ukupnog trajanja svih pesama zajedno.Svaki album mora da sadrzi metod play koji ce proci kroz sve pesme i pozvati metod playnad svakom od njih.

majestic.inc.
24.04.2018
Одељци: Зид Питања и одговори majestic.inc. | Кључне речи:
0

Коментари:

Нови одговор Нови коментар

Одговори:

Приказано 1-1 од 1 ставке.

Решење користи наговештаје типова (type hinting), тако да методе (функције) класа прихватају само параметре одговарајућег типа. Посебно треба обратити пажњу на конструкцију ?int $godinaSmrti која је релативно новија и захтева PHP 7.1 или новију верзију. Знак питања испред int значи да се као параметар, осим целобројне вредности, може предати и null

<?php
class Izvodjac
{
    public $ime;
    public $godinaRodjenja;
    public $godinaSmrti;
    public function __construct(string $ime, int $godinaRodjenja, ?int $godinaSmrti)
    {
        $this->ime = $ime;
        $this->godinaRodjenja = $godinaRodjenja;
        $this->godinaSmrti = $godinaSmrti;
    }
    public function isZiv():bool
    {
        return empty($this->godinaSmrti);
    }   
}

class Pesma
{
    public $naziv;
    public $trajanje;
    public function __construct(string $naziv, int $trajanje)
    {
        $this->naziv = $naziv;
        $this->trajanje = $trajanje;
    }

    public function play() 
    {
        echo 'Тренутно слушате ' . $this->naziv . PHP_EOL;
    }    
}

class Album 
{
    public $izvodjac;
    public $pesme;
    public $godinaIzdavanja;
    public $muzickiPravac;

    public function __construct(Izvodjac $izvodjac, array $pesme, int $godinaIzdavanja, string $muzickiPravac)
    {
        $this->izvodjac = $izvodjac;
        $this->pesme = $pesme;
        $this->godinaIzdavanja = $godinaIzdavanja;
        $this->muzickiPravac = $muzickiPravac;
    }
    
    public function izracunajUkupnoTrajanje():int
    {
        $trajanje = 0;
        foreach ($this->pesme as $pesma) {
            $trajanje += $pesma->trajanje;
        }
        return $trajanje;       
    }    

    public function prikaziUkupnoTrajanje()
    {
        echo 'Укупно трајање албума је '. gmdate('H:i:s', $this->izracunajUkupnoTrajanje()) . PHP_EOL;
    }

    public function prikazSvihPesama()
    {
        foreach ($this->pesme as $pesma) {
            echo $pesma->naziv . PHP_EOL;
        }
    }
    public function play()
    {
        foreach ($this->pesme as $pesma) {
            echo $pesma->play();
        }        
    }
}

//Test:

$izvodjac = new Izvodjac('Pera', 1978, null);

$pesme = [
    new Pesma('Звончићи, звончићи', 180),
    new Pesma('Санке Деда Мраза',120),
    new Pesma('Божић бата', 100),
    new Pesma('Ода компајлеру', 280),
    new Pesma('Арија у Бејзику', 380),
];

$album = new Album($izvodjac, $pesme, 2018, 'Техно');
$album->prikaziUkupnoTrajanje();
$album->play();














 

Ивица
25.12.2018
Одељци: Зид Питања и одговори Ивица | Кључне речи:
0

Коментари:

Нови коментар

©Библиотека++ 2024 Развој сајта Ивица Лазаревић