Aprenda POO PHP

  • Página Inicial
  • Contato!
  • Tudo sobre POO PHP Parte 1!
  • Tudo sobre POO PHP Parte 2!
  • Tudo sobre POO PHP Parte 3!
  • Tudo sobre POO PHP Parte 4!
  • Tudo sobre POO PHP Parte 5!
  • Tudo sobre POO PHP Parte 6!
  • Tudo sobre POO PHP Parte 7!
  • Tudo sobre POO PHP Parte 7

    Projeto Final em PHP - Parte 2

    Na segunda parte do exercício, faremos a ligação das classes Video e Gafanhotos, usando uma classe com o nome Visualizacao. Esse é o diagrama dela:

    Visualizacao
    - espectador
    - filme
    + avaliar()
    + avaliar(nota)
    + avaliar(porc)

    PS: Lembrando que no PHP não existe sobrecarga, vamos usar uma "gambiarra" pra burlar isso.

    Veja o código de Visualizacao:

    
    require_once "Video.php";
    require_once "Gafanhoto.php";
    
    class Visualizacao {
        private $espectador;
        private $filme;
        
        public function __construct($espectador, $filme) {
            $this->espectador = $espectador;
            $this->filme = $filme;
            $this->filme->setViews($this->filme->getViews() + 1);
            $this->espectador->setTotAssistido($this->espectador->getTotAssistido() + 1);
        }
        
        public function __destruct() {
            unset($this->espectador);
            unset($this->filme);
    
            echo "Objeto Visualizacao Destruído!<br/>";
        }
    
        public function getEspectador() {
            return $this->espectador;
        }
    
        public function getFilme() {
            return $this->filme;
        }
    
        public function setEspectador($espectador) {
            $this->espectador = $espectador;
        }
    
        public function setFilme($filme) {
            $this->filme = $filme;
        }
    }
    
    

    E no index, podemos fazer isso:

    
    require_once "Visualizacao.php";
    
    $v = array();
    
    array_push($v, new Video("Aula 1 de POO"));
    array_push($v, new Video("Aula 12 de PHP"));
    array_push($v, new Video("Aula 15 de HTML5"));
    
    $g = array();
    
    array_push($g, new Gafanhoto("Jubileu", 22, "M", "Jubi"));
    array_push($g, new Gafanhoto("Creuza", 12, "F", "Creuzita"));
    
    $vis = array();
    
    array_push($vis, new Visualizacao($g[0], $v[2]));
    array_push($vis, new Visualizacao($g[0], $v[1]));
    
    print_r($vis[0]);
    print_r($vis[1]);
    
    unset($v);
    unset($g);
    unset($vis);
    
    

    Agora faremos o polimorfismo de sobrecarga (que na prática, não existem em PHP). Terá três tipos de avaliação, por like, por nota e por porcentagem de vídeos assistidos.

    Abaixo do método construtor em Visualização, apenas poste isso:

    
    public function avaliar() {
        $this->filme->setAvaliacao(5);
    }
    
    public function avaliarNota($nota) {
        $this->filme->setAvaliacao($nota);
    }
    
    public function avaliarPorc($porc) {
        $nova = 0;
        if($porc <= 20) {
            $nova = 3;
        }
        else if($porc > 20 && $porc <= 50) {
            $nova = 5;
        }
        else if($porc > 50 && $porc <= 90) {
            $nova = 8;
        }
        else {
            $nova = 10;
        }
        $this->filme->setAvaliacao($nova);
    }
    
    

    Mas tem um porém, várias pessoas podem ver o vídeo, e dessa forma ele fará que a última avaliação que prevaleça. Para resolver isso, criaremos uma forma dele criar uma média de avaliações.

    Na classe Video, em public function setAvaliacao, modificaremos pra isso:

    
    public function setAvaliacao($avaliacao) {
        $media = ($this->avaliacao + $avaliacao) / $this->views;
        $this->avaliacao = $media;
    }
    
    

    Como podemos ver, podemos personalisar os métodos getter e setter, nem sempre precisamos "aceitar" tudo que o Netbeans nos sugere.

    E no index, para exibir, faremos isso:

    
    require_once "Visualizacao.php";
    
    $v = array();
    
    array_push($v, new Video("Aula 1 de POO"));
    array_push($v, new Video("Aula 12 de PHP"));
    array_push($v, new Video("Aula 15 de HTML5"));
    
    $g = array();
    
    array_push($g, new Gafanhoto("Jubileu", 22, "M", "Jubi"));
    array_push($g, new Gafanhoto("Creuza", 12, "F", "Creuzita"));
    
    $vis = array();
    
    array_push($vis, new Visualizacao($g[0], $v[2]));
    array_push($vis, new Visualizacao($g[0], $v[1]));
    
    $vis[0]->avaliar();
    $vis[1]->avaliarPorc(85.0);
    
    print_r($vis[0]);
    print_r($vis[1]);
    
    unset($v);
    unset($g);
    unset($vis);
    
    

    PS: Também utilizamos objetos para ligar o PHP com banco de dados, como por exemplo, o uso de PDO.